Redis常用数据类型及使用场景
Redis最为常用的数据类型
- 字符串(String)
- 字符串列表(list)
- 字符串集合(set)
- 哈希(hash)
- 有序的字符串集合(sorted set)
String(字符串)
字符串是最基本的一种Redis值。Redis字符串是二进制安全的,这意味着Redis字符串可以包含任何类型的数据,例如JPEG图像或序列化的Ruby对象。字符串的长度可以是最大512MB。
可以用Redis中的字符串做一些有趣的事情,例如:
- 将字符串用作原子计数器,使用INCR系列中的命令:INCR、DECR、INCRBY。
- 使用Append命令向字符串追加。
- 使用字符串作为带有GETRANGE和SETRANGE的随机访问向量。
- 在小空间中编码大量数据,或者使用GETBIT和SETBIT创建Redis支持的Bloom过滤器。
List(字符串列表)
Redis列表是简单的字符串列表,按插入顺序排序。可以将元素添加到Redis列表中,在列表的头部(左侧)或尾部(右侧)添加新元素。LPUSH命令在头部插入一个新元素,而RPUSH在尾部插入一个新元素。当对空键执行其中一个操作时,将创建一个新列表。类似地,如果列表操作将清空列表,则从键空间中删除该键。这些都是非常方便的语义,因为如果使用不存在的键作为参数进行调用,那么所有列表命令的行为都与使用空列表调用它们时的行为完全相同。
列表操作和结果列表的一些示例:
LPUSH mylist a # now the list is "a"
LPUSH mylist b # now the list is "b","a"
RPUSH mylist c # now the list is "b","a","c" (使用 RPUSH命令)
列表的最大长度是2^32 - 1个元素(4294967295,每个列表可以包含超过40亿个元素)。从时间复杂性的角度来看,Redis列表的主要特性是支持在头和尾附近不断地插入和删除元素,即使插入了数百万元素。访问元素在列表的极端位置非常快,但是如果你试图访问一个非常大的列表的中间位置,则速度会很慢,因为这是一个O(N)操作。
可以用Redis中的字符串做一些有趣的事情,例如:
- 为社交网络中的时间轴建模,使用LPUSH在用户时间线上添加新元素,使用LRANGE检索最近插入的一些项。
- 可以使用LPUSH和LTRIM一起创建一个列表,该列表的元素数量不会超过给定的元素数量,但是只记住最新的N个元素。
- 列表可以用作消息传递原语,例如用于创建后台作业的著名Resque Ruby库。
- 可以使用列表做更多的事情,这种数据类型支持许多命令,包括像BLPOP这样的阻塞命令。
Set(集合)
Redis集合是字符串的无序集合。可以在O(1)中添加、删除和测试成员的存在性(无论集合中包含多少元素,时间都是常量)。Redis集具有不允许重复成员的理想属性。多次添加相同的元素将导致一个集合具有此元素的单一副本。实际上,这意味着添加成员不需要检查是否存在,然后添加操作。关于Redis集合,它们支持从现有集合开始计算集合的许多服务器端命令,因此可以在很短的时间内完成集合的并集、交集和差异。一个集合的最大成员数是2^32 - 1(4294967295,每个集合的成员数超过40亿)。
可以用Redis集合做很多有趣的事情,例如:
- 可以使用Redis集跟踪唯一的东西。想知道访问给定博客文章的所有唯一IP地址吗?每次处理页面视图时只需使用SADD即可。不用担心重复ip问题,因为集合会自动过滤。
- Redis集合很好地表示关系。可以使用Redis创建一个标记系统,使用一个集合来表示每个标记。然后,可以使用SADD命令将具有给定标记的所有对象的所有id添加到表示该特定标记的集合中。也可以使用SINTER命令返回交集成员集合。
- 可以使用集合使用SPOP或SRANDMEMBER命令随机提取元素。
Hash(哈希)
Redis散列是字符串字段和字符串值之间的映射,因此它们是表示对象的最佳数据类型(例如,具有多个字段(如name、姓氏、年龄等)的用户):
@cli
HMSET user:1000 username antirez password P1pp0 age 34
HGETALL user:1000
HSET user:1000 password 12345
HGETALL user:1000
- 带有几个字段的散列(其中几个字段的意思是最多100个左右)以一种占用很少空间的方式存储,因此可以在一个小型Redis实例中存储数百万个对象。
- 虽然散列主要用于表示对象,但它们能够存储许多元素,因此你也可以将散列用于许多其他任务。
- 每个散列最多可以存储2^32 1个字段值对(超过40亿)。
Sorted-set(有序的set集合)
与Redis集合类似,Redis排序集是字符串的非重复集合。不同之处在于,排序集的每个成员都与分数相关,分数是用来对排序集进行排序的,从最小的分数到最大的分数。虽然成员是唯一的,分数可以重复。使用排序的集合,可以以一种非常快的方式(在与元素数量的对数成比例的时间内)添加、删除或更新元素。可以非常快速地按分数或按级别(位置)获取范围。访问排序集的中间也非常快,所以可以使用排序集作为一个非重复元素的智能列表,在其中你可以快速访问所需的一切:元素顺序,快速存在测试,快速访问中间元素!简而言之,使用排序集,你可以完成许多性能优异的任务,这些任务在其他类型的数据库中很难建模。
有了排序集,你可以:
- 在一款大型在线游戏中,你可以选择一个排行榜,每当有新的分数被提交时,你就可以使用ZADD进行更新。可以轻松地使用ZRANGE获取顶级用户,还可以在给定用户名的情况下,使用ZRANK返回其在列表中的排名。同时使用ZRANK和ZRANGE,可以向用户显示与给定用户类似的分数。这些操作都非常快。
- 排序集通常用于索引存储在Redis中的数据。例如,如果有许多表示用户的散列,那么可以使用一个已排序的集合,其中的元素以用户的年龄为得分,以用户的ID为值。因此,使用ZRANGEBYSCORE检索给定时间间隔的所有用户既简单又快速。
- 排序集可能是最先进的Redis数据类型,所以花点时间检查排序集命令的完整列表,以发现可以使用Redis做什么!
Redis常用数据类型及使用场景的更多相关文章
- Redis常用数据类型介绍、使用场景及其操作命令
Redis常用数据类型介绍.使用场景及其操作命令 本文章同时也在cpper.info发布. Redis目前支持5种数据类型,分别是: 1.String(字符串) 2.List(列表) 3.Hash(字 ...
- Redis常用数据类型
Redis常用数据类型 转载自:http://blog.sina.com.cn/s/blog_7f37ddde0101021q.html Redis最为常用的数据类型主要有以下五种: ●Str ...
- Redis常用数据类型及各种数据类型应用和实现方式
Redis常用数据类型: StringHashListSetSorted set 在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Red ...
- Redis常用数据类型以及操作
Redis常用数据类型以及操作 目录 Redis常用数据类型以及操作 一.String数据类型 1. SET/GET/APPEND/STRLEN 2. INCR/DECR/INCRBY/DECRBY ...
- Redis各种数据类型的应用场景
redis是一种key values形式的非关系型数据库,通过内存存储,也可以把数据持久化到本地文件中. redis支持丰富的数据类型,String,list,set,zset,hash,下面说一下各 ...
- redis之 Redis常用数据类型
Redis最为常用的数据类型主要有以下7种: 一. String (字符) 常用命令: set,get,decr,incr,mget 等. 应用场景:String是最常用的一种数据类型,普通的key ...
- Redis常用数据类型和事物以及并发
Redis数据类型 基本类型(String int): 如 set key value .get key 等 所有命令都是按照 key value keys * 可以将全部数据列出,其中后面的 &qu ...
- Redis各种数据类型的使用场景
Redis的六种特性 l Strings l Hashs l Lists l Sets l Sorted Sets l Pub/Sub Redis各特性的应用场景 Strings Strings 数据 ...
- 一文搞定Redis五大数据类型及应用场景
本文学习知识点 redis五大数据类型数据类型:string.hash.list.set.sorted_set 五大类型各自的应用场景 @TOC 1. string类型 1-1 string类型数据的 ...
随机推荐
- “全栈2019”Java多线程第三十一章:中断正在等待显式锁的线程
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...
- Linux高级文件系统管理(8)
如果您的 Linux 服务器有多个用户经常存取数据时,为了维护所有使用者在硬盘容量的公平使用,磁碟配额 (Quota) 就是一项非常有用的工具,另外,如果你的用户常常抱怨磁盘容量不够用,那么更进阶的文 ...
- 安装fastdfs文件系统
1.下载源码包 需要下载的源码包: fastDFS源代码:FastDFS_v5.01.tar.gz fastDFS的nginx模块源代码:fastdfs-nginx-module_v1.15.tar. ...
- List集合和Set集合的遍历方法
Set集合遍历方法: 对 set 的遍历 1.迭代遍历: Set<String> set = new HashSet<String>(); Iterator<String ...
- expr命令总结
expr在linux中是一个功能非常强大的命令.通过学习做一个小小的总结.1.计算字符串的长度.我们可以用awk中的length(s)进行计算.我们也可以用echo中的echo ${#string}进 ...
- Git使用(3)
1.查看本地和远程分支 git branch -a 删除本地分支 git branch -D branchName(D要大写) 删除远程分支 git push origin :branchName 2 ...
- 关于 ASP.NET Web 应用中 async/await 注意问题
System.NullReferenceException: Object reference not set to an instance of an object. at System.Web.T ...
- 基于Web Service的客户端框架搭建三:代理层(Proxy)
前言 代理层的主要工作是调用Web Service,将在FCL层序列化好的Json数据字符串Post到Web Service,然后获得Reponse,再从响应流中读取到调用结果Json字符串,在Dis ...
- 使用秘钥ssh登录远程服务器
一.使用公钥远程登录ssh服务器方式 1.1 在客户端使用ssh-keygen 生成密匙 steven:~ admin$ ssh-keygen //客户端生成秘钥 Generating public ...
- [开源项目]Shell4Win,一个在Windows下执行shell命令的解释器
背景 顺利拿到心目中的理想offer之后,心里的负担一下减轻了很多,希望利用还没毕业之前这段难得的悠闲时间做一点有意义的事情.于是希望能做一个长久以来都想做的开源项目,就是题中提到的Windows下的 ...