2.初级篇:Redis 数据结构

Redis数据结构详解

深入的开始

Redis作为一款目前市场比较流行的缓存,除了性能和简便性优异与其他同款开源软件之外,还支持更多的数据类型,而不是简单的key-value的数据结构记录。

Redis还支持对这些数据类型支持更多的服务端操作,这样的话,能减少前端应用层到数据库的网络以及I/O的开销。

Redis 主要支持的数据类型前边简单介绍过 ,总共有5种:String、Hash、List,Set 以及Sorted Set。

我们将主要针对这5中数据结构进行详解,方便大家的理解和应用。更深入的了解,不仅方便我们的运维(和RD撕逼的时候更有话语权,哈哈),也方便我们架构的拓扑和深入发展。

String 字符串类型

字符串是Redis的一种罪进本的值的类型。Redis字符串具有二进制安全功能,主要是指二进制文件上执行的不更改文件内容的功能或者操作,把操作数据作为原始的、无任何特殊格式意义的数据流进行存储。

这就意味着字符串可以包含任意类型,比如字符串、数字、存储图片、json、或者web的css等静态文件。当然这个值也是有限制的,请大家记住 512M这个数字。最大值不能超过512M。

字符串的操作

Redis是key-value形式存储,首先我们先了解一下如何创建和获取一个值。

1.创建key之 set, 获取value 之 get

SET 是一个插入的操作,当我们命令执行成功之后会返回一个OK 的提示。

如果当前key的name存在的话,则会覆盖。所以key的命名在使用中一定规范。如果搭建公用的数据缓存平台 ,更需要注意这些问题,不同的项目设定不通名称的key用来区分,避免出现覆盖操作。

有兴趣的可以自己去尝试一下,重新set后是否会覆盖。

 

127.0.0.1:6379> set key1 hello 
OK
127.0.0.1:6379> set key2 123
OK
127.0.0.1:6379> set key3 我爱孤舟

 

通过以上命令呢,我们设置了三个key ,我们可以通过get命令来获取我们的值。需要注意的是 ,当我们查询的键值为空,不存在时 ,redis返回nil 一个空。

1.png

我们可以简单知道如何插入和查询我们key对应的值。但是我们仍然会有特殊需求的时候比如,我们需要批量插入一些值的时候怎么办 ,或者是一次需要获取多个值的时候。

2.批量插入 mset 和 批量查询 mget

 

127.0.0.1:6379> mset key4 four key5 five key6 six  
OK
127.0.0.1:6379> 
127.0.0.1:6379> mget key1 key2 key3 key4 key5 key6
1) "hello"
2) "123"
3) "\xe6\x88\x91\xe7\x88\xb1\xe5\xad\xa4\xe8\x88\x9f"
4) "four"
5) "five"
6) "six"

 

2.png

通过以上命令,我们可以批量的插入和批量获取,可能会有同学会问,这个操作具体有什么用呢 ?

其实很简单,当大批量的操作出现时,单次请求插入多个值,或者获取多个可以减少网络的开销。

不要小看一个毫秒甚至纳秒级的操作,量变会引起质变。比如百度首页 1秒或者0.5秒的提升,都是有很多人努力付出的结果,因为量级太大。

3.追加appen 与 del 删除

我们可以通过重复set 的方式给key重新赋值 ,当然我们在操作的时候也会有需求对key进行字符串的追加或者对key进行删除操作。

 

127.0.0.1:6379> append key1 world     #追加内容
(integer) 10
127.0.0.1:6379> 
127.0.0.1:6379> get key1 
"helloworld"
127.0.0.1:6379> append key1 world 
(integer) 15
127.0.0.1:6379> get key1 
"helloworldworld"
127.0.0.1:6379> del key1               #删除key 
(integer) 1
127.0.0.1:6379> get key1 
(nil)
127.0.0.1:6379> 

 

3.png

下边我们对其他涉及到String操作的命令进行演示和说明:

 

127.0.0.1:6379> get key2
"124"
127.0.0.1:6379> incr key2        #对key进行 +1的操作,非int64则会报错
(integer) 125
127.0.0.1:6379> get key2
"125"
127.0.0.1:6379> incrby key2 10   #对key进行 +N的操作。
(integer) 135
127.0.0.1:6379> get key2
"135"
127.0.0.1:6379> decr key2        #对key进行 -1的操作。
(integer) 134
127.0.0.1:6379> get key2        
"134"
127.0.0.1:6379> decrby key2 5    #对key进行 -N的操作。
(integer) 129
127.0.0.1:6379> 

127.0.0.1:6379> object encoding key2
"int"

 

以上操作是针对当value 为int的时候可进行操作。具体的使用,比如你可以把一个值当做一个计数器,每当调用一次+1,计算速度快,可以快速的只掉调用多少次。

 

127.0.0.1:6379> setex key1 10 hello       #创建key并制定过期时间单位秒 ex
OK
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> get key1
"hello"
127.0.0.1:6379> 
127.0.0.1:6379> get key1                 #过期可以看到key返回为nil
(nil)
127.0.0.1:6379> 
127.0.0.1:6379> get key2
"129"
127.0.0.1:6379> set key1  hello px 10000  #过期时间单位毫秒   px
OK
127.0.0.1:6379> get key1
(nil)
127.0.0.1:6379> set key1  hello ex 1000
OK
127.0.0.1:6379> ttl key1                  #查看key的过期时间单位秒  ttl
(integer) 996
127.0.0.1:6379> set key1  hello px 10000
OK
127.0.0.1:6379> 
127.0.0.1:6379> ttl key1
(integer) 8
127.0.0.1:6379> ttl key1
(integer) 5
127.0.0.1:6379> ttl key1
127.0.0.1:6379> 

#字符串替换和截取
一定要注意,下标从 0 开始计算,0是第一位。
127.0.0.1:6379> set key1 hello
OK
127.0.0.1:6379> setrange key1 4 world   #从第5位开始替换,下标从0开始
(integer) 9
127.0.0.1:6379> get key1
"hellworld"
127.0.0.1:6379> set key1 1             #重点-----从新设置了key
OK
127.0.0.1:6379> setrange key1 5 hello  #从第6位开始替换,如果没有那么多位,使用\x00替代
(integer) 10
127.0.0.1:6379> get key1               #验证上一描述。
"1\x00\x00\x00\x00hello"
127.0.0.1:6379> 
127.0.0.1:6379> set key2 123456789
OK
127.0.0.1:6379> getrange key2 1 5      #从第2位到第6位,这里下标值是包涵5的,所以第六位包涵在内。 
"23456"
127.0.0.1:6379> getrange key2 1 1
"2"
127.0.0.1:6379> getrange key2 10 11   #下标的key内没有值的时候,出现空。
""
127.0.0.1:6379> 
127.0.0.1:6379> strlen key2           #查看value长度,咱们这个key有9位。
(integer) 9
127.0.0.1:6379> get key2
"123456789"
127.0.0.1:6379> 

 

通过上述发现,我的描述过于啰嗦和细致,那么我们针对下边的尽量简练一些,抓住重点讲解即可。希望大家可以留言,反馈希望看到哪种形式。

List列表类型

Redis列表是简单的字符串列表,按照插入顺序排序。 你可以添加一个元素到列表的头部(左边)或者尾部(右边)。

LPUSH 命令插入一个新元素到列表头部,而RPUSH命令 插入一个新元素到列表的尾部。

当对一个空key执行其中某个命令时,将会创建一个新表。 类似的,如果一个操作要清空列表,那么key会从对应的key空间删除。这是个非常便利的语义, 因为如果使用一个不存在的key作为参数,所有的列表命令都会像在对一个空表操作一样。

一个列表最多可以包含232-1个元素(4294967295,每个表超过40亿个元素)。

依靠redis内存中操作数据的优势,又提供一些列实用独特的Api操控数据,用着简便,速度又快,又能实现特有的数据特征排序读写,做时间轴数据,评论列表,消息传递等等,又提供简便的分页,读写操作。优势还是蛮多的。

List创建操作篇之 增、删、改、查

 

127.0.0.1:6379> 
127.0.0.1:6379> rpush list1 1      #rpush 在右侧插入一个值,这是第一个创建,不分左右
(integer) 1
127.0.0.1:6379> rpush list1 2      #在 1 值的后边插入2
(integer) 2
127.0.0.1:6379> rpush list1 3
(integer) 3                        # 这个返回表示list内有多少元素 
127.0.0.1:6379> rpush list1 4
(integer) 4
127.0.0.1:6379> lrange list1 0 1   #lrange 获取list 下标 0到1,注意这里是从x到y的关系,不是x,y两个下标。
1) "1"
2) "2"
127.0.0.1:6379> lrange list1 0 0   #同上,获取下标0到0
1) "1"
127.0.0.1:6379> lindex list1 0     #lindex 命令 获取单个list内单个下标数据,下标从0开始,所以获取1
"1"
127.0.0.1:6379> lindex list1 2
"3"
127.0.0.1:6379> lindex list1 1
"2"
127.0.0.1:6379> lrange list1 0 -1  #lrange操作,重点: -1  上边已经描述两个下标是从x到y的关系,-1 代表最后一个,所以这里会取出全部。
1) "1"
2) "2"
3) "3"
4) "4"
127.0.0.1:6379> lpush list1 5      #lpush 命令 在list左侧,插入一个值
(integer) 5
127.0.0.1:6379> lrange list1 0 -1  #验证可以看到5确实在最前边
1) "5"
2) "1"
3) "2"
4) "3"
5) "4"
127.0.0.1:6379> 
127.0.0.1:6379> linsert list1 after 2 6  #linsert 命令,可以支持在某个值的前边、或者后边插入一个值,after是后边,before是前边 ,这里的 2 不是下标,是list内的值。6 则是需要插入值。 
(integer) 6
127.0.0.1:6379> lrange list1 0 -1    
1) "5"
2) "1"
3) "2"
4) "6"                           # 数值6 确实插入到 2 的后边。注意 这里是list内的值,不是下标,不是下标、不是下标 重要的事情说三遍。
5) "3"
6) "4"
127.0.0.1:6379> lpush list1 a
(integer) 7
127.0.0.1:6379> lrange list1 0 -1
1) "a"
2) "5"
3) "1"
4) "2"
5) "6"
6) "3"
7) "4"
127.0.0.1:6379> linsert list1 after a 7
(integer) 8
127.0.0.1:6379> linsert list1 after b 7   #如果list内没有 b 这个值的时候,返回 -1 ,表示插入失败
(integer) -1
127.0.0.1:6379> lrange list1 0 -1
1) "a"
2) "7"
3) "5"
4) "1"
5) "2"
6) "6"
7) "3"
8) "4"
127.0.0.1:6379> linsert list1 before 5 8  # linsert list before x y 这里的是在5之前插入8,同样是list内的值。
(integer) 9
127.0.0.1:6379> lrange list1 0 -1
1) "a"
2) "7"
3) "8"
4) "5"
5) "1"
6) "2"
7) "6"
8) "3"
9) "4"
127.0.0.1:6379> 

 

这里经常会出现list 值 和list 下标的区别,希望大家注意重点。

 

127.0.0.1:6379> lrange list1 0 -1
1) "a"
2) "7"
3) "8"
4) "5"
5) "1"
6) "2"
7) "6"
8) "3"
9) "4"
127.0.0.1:6379> lpop list1          #lpop 从左侧移除一个元素
"a"
127.0.0.1:6379> lrange list1 0 -1
1) "7"
2) "8"
3) "5"
4) "1"
5) "2"
6) "6"
7) "3"
8) "4"
127.0.0.1:6379> rpop list1           #rpop 从右侧移除一个元素
"4"
127.0.0.1:6379> lrange list1 0 -1
1) "7"
2) "8"
3) "5"
4) "1"
5) "2"
6) "6"
7) "3"
127.0.0.1:6379> ltrim list1 1 3      #ltrim 保留下标1 到 3 其余删除。下标、下标、下标。哈哈
OK
127.0.0.1:6379> lrange list1 0 -1
1) "8"
2) "5"
3) "1"
127.0.0.1:6379> 
127.0.0.1:6379> llen list1          #llen 列表长度
(integer) 3
127.0.0.1:6379> 
127.0.0.1:6379> lset list1 1 hello  #lset 替换下标 1 的元素。
OK
127.0.0.1:6379> lrange list1 0 -1
1) "8"
2) "hello"
3) "1"
127.0.0.1:6379> rpush list2 a
(integer) 1
127.0.0.1:6379> rpush list2 b
(integer) 2
127.0.0.1:6379> rpush list2 c
(integer) 3
127.0.0.1:6379> rpush list2 d
(integer) 4
127.0.0.1:6379> rpush list2 e f g  #可以一次插入多个元素
(integer) 7
127.0.0.1:6379> lrange list2 0 -1  
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
6) "f"
7) "g"
127.0.0.1:6379> lrange list1 0 -1
1) "8"
2) "hello"
3) "1"
127.0.0.1:6379> 
127.0.0.1:6379> rpoplpush list1 list2  #rpoplpush 把list1的最后一个元素,插入到list2 的最前变。
"1"
127.0.0.1:6379> lrange list1 0 -1
1) "8"
2) "hello"
127.0.0.1:6379> lrange list2 0 -1     #插入到list2成功
1) "1"
2) "a"
3) "b"
4) "c"
5) "d"
6) "e"
7) "f"
8) "g"
127.0.0.1:6379> 

 

list的所有操作我们已经全部完成,需要大家重点关注的地方,就是list内元素与下标的区别。什么时候使用元素,什么时候使用下标。

Sets 集合的操作

在Redis中Set 和 list 都是字符串的集合。但是Set是无序的集合。集合中的元素都是唯一的,当然是不允许出现重复数据的,后边的例子操作中可以看到。主要原因在于set集合中使用hash来保持了元素的唯一性。下边我们通过实际的操作来讲解如何使用Sets。

 

127.0.0.1:6379> sadd set1 1        #增加1个元素
(integer) 1
127.0.0.1:6379> sadd set1 2 3 4 5  #支持增加一个或者多个元素
(integer) 4
127.0.0.1:6379> 
127.0.0.1:6379> smembers set1      #查看集合中所有元素
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
127.0.0.1:6379> sismember set1 3  #查看值是否在集合中,在返回1
(integer) 1
127.0.0.1:6379> sismember set1 6 #查看元素是否在集合中,不存在返回0
(integer) 0
127.0.0.1:6379> 
127.0.0.1:6379> sadd set1 a b c d
(integer) 4
127.0.0.1:6379> srem set1 2    #删除某个元素
(integer) 1
127.0.0.1:6379> srem set1 a  
(integer) 1
127.0.0.1:6379> srem set1 b 4  #同时删除多个元素
(integer) 2
127.0.0.1:6379> smembers set1  #查看所有元素  
1) "3"
2) "5"
3) "d"
4) "1"
5) "c"
127.0.0.1:6379> sadd set1 1
(integer) 0
127.0.0.1:6379> smembers set1
1) "3"
2) "5"
3) "d"
4) "1"
5) "c"
127.0.0.1:6379> sadd set1 2
(integer) 1
127.0.0.1:6379> sadd set1 1 2 3
(integer) 0
127.0.0.1:6379> smembers set1
1) "3"
2) "5"
3) "2"
4) "d"
5) "1"
6) "c"
127.0.0.1:6379> scard set1   #插损集合中有多少元素
(integer) 6
127.0.0.1:6379> 
127.0.0.1:6379> scard set2
(integer) 0
127.0.0.1:6379> srandmember set1  #随机获取一个元素
"d"
127.0.0.1:6379> srandmember set1
"3"
127.0.0.1:6379> srandmember set1
"2"
127.0.0.1:6379> sadd set2 1 2 3 4 5 6
(integer) 6
127.0.0.1:6379> 
127.0.0.1:6379> smove set1 set2 3 #从set1中移除,存放到set2中。本次操作由于set2中有3这个值,所以set1中移除,由于唯一性set2中,还是保持只有一个3.
(integer) 1
127.0.0.1:6379> smembers set1
1) "5"
2) "2"
3) "d"
4) "1"
5) "c"
127.0.0.1:6379> smembers set2
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
127.0.0.1:6379> smove set1 set2 d
(integer) 1
127.0.0.1:6379> smembers set1
1) "5"
2) "2"
3) "1"
4) "c"
127.0.0.1:6379> smembers set2
1) "4"
2) "3"
3) "6"
4) "5"
5) "2"
6) "1"
7) "d"
127.0.0.1:6379> sunion set1 set2  #查看两个set的合并集,唯一输出,不重复显示
1) "3"
2) "4"
3) "6"
4) "5"
5) "1"
6) "2"
7) "c"
8) "d"
127.0.0.1:6379> 
127.0.0.1:6379> sinter set1 set2  #查看set1 set2的交集,共同拥有的值。
1) "5"
2) "2"
3) "1"
127.0.0.1:6379> 
127.0.0.1:6379> sdiff set1 set2  #对比set1 和 set2差异(以set1为基准)
1) "c"
127.0.0.1:6379> sdiff set2 set1  #对比set2 和set1的差异(以set2为基准)
1) "4"
2) "3"
3) "d"
4) "6"
127.0.0.1:6379> 

 

重点关注: 对于这个数据类型的学习,大家一定要记住集合的唯一性这个特性。

Hash 之操作

hash是一个string类型的field和value的映射表。添加和删除操作都是O(1)(平均)的复杂度。

hash类型特别适合用于存储对象。

在field的数量在限制的范围内以及value的长度小于指定的字节数,那么此时的hash类型是用zipmap存储的,所以会比较节省内存。

可以在配置文件里面修改配置项来控制field的数量和value的字节数大小。

Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿)。

【注意】 如何来具体理解这个数据类型呢,大家可以模拟成数组、或者表的概念,更好理解一些。或者python里的字典。hash是一个表,表里有key和对应的value。比如字典里有hash1 ,里边有{name:孤舟、age:60} 这其中name 和age 就是key 。孤舟、和60 就是value。数组的理解就是key就是数组下标、value就是数组下标对应的值。希望可以帮助大家理解。

废话不多说、开始我们的表演

hash的使用与操作

 

127.0.0.1:6379> hset hash1 name guzhou    #创建并插入单个值
(integer) 1
127.0.0.1:6379> hset hash1 aget 30
(integer) 1
127.0.0.1:6379> hget hash1 name           #获取hash表中键值为  name的 value
"guzhou"
127.0.0.1:6379> hset hash1 name guzhou1   #原来已存在,插入是则修改
(integer) 0
127.0.0.1:6379> hget hash1 name
"guzhou1"
127.0.0.1:6379> hlen hash1                #查看元素数量      
(integer) 2
127.0.0.1:6379> 
127.0.0.1:6379> hexists hash1 name        #判断键值 name 是否存在 真 1 假 0
(integer) 1
127.0.0.1:6379> hexists hash1 sex
(integer) 0
127.0.0.1:6379> hset hash1 sex man 
(integer) 1
127.0.0.1:6379> hset hash1 phone 12345678910
(integer) 1
127.0.0.1:6379> hset hash1 addr peiking
(integer) 1
127.0.0.1:6379> 
127.0.0.1:6379> hget hash1 sex
"man"
127.0.0.1:6379> hget hash1 sex
"man"
127.0.0.1:6379> hdel hash1 sex name       #删除1个或者多个键值
(integer) 2
127.0.0.1:6379> hget hash1 sex
(nil)
127.0.0.1:6379> hget hash1 name
(nil)
127.0.0.1:6379> hgetall hash1           #获取hash表内所有键值和数据
1) "aget"
2) "30"
3) "phone"
4) "12345678910"
5) "addr"
6) "peiking"
127.0.0.1:6379> 
127.0.0.1:6379> hmset hash1 name guzhou sex man  #插入多个键值和数据
OK
127.0.0.1:6379> hmget hash1 name phone           #查看hash表中多个键值的value
1) "guzhou"
2) "12345678910"
127.0.0.1:6379> 
127.0.0.1:6379> hkeys hash1                      #查看hash表中所有的key。
1) "aget"
2) "phone"
3) "addr"
4) "name"
5) "sex"
127.0.0.1:6379> hvals hash1                      #查看hash表中所有value
1) "30"
2) "12345678910"
3) "peiking"
4) "guzhou"
5) "man"
127.0.0.1:6379> 

 

关于hash表的操作已经全部演示完成,希望的大家可以详细查看每一个操作的命令和说明。

Sorted Sets 有序集合

Redis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。

不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。

有序集合的成员是唯一的,但分数(score)却可以重复。

集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。 集合中最大的成员数为 232 - 1 (4294967295, 每个集合可存储40多亿个成员)。

【注意重点】 大家一定要注意,数据插入的时候值不可以重复,分数可以重复。大家可以理解为权重、值。两个部分组成,权重可以相同,值一定不能相同。否则插入时会覆盖

 

127.0.0.1:6379> zadd zset1 1 peiking   #插入分支和数据。可以多个,一定要有权重
(integer) 1
127.0.0.1:6379> zadd zset1 2 shanghai
(integer) 1
127.0.0.1:6379> zadd zset1 3 guangzhou
(integer) 1
127.0.0.1:6379> zadd zset1 4 shenzhen
(integer) 1
127.0.0.1:6379> zadd zset1 5 tianjin
(integer) 1
127.0.0.1:6379> zadd zset1 6 tianjin
(integer) 0
127.0.0.1:6379> zadd zset1 7 tianjin
(integer) 0
127.0.0.1:6379> zrange zset1 0 -1 withscores  #按照权重,从小到大限制, 0 -1 都是下标,代表显示全部。
 1) "guzhou"
 2) "1"
 3) "peiking"
 4) "1"
 5) "guzhou2"
 6) "2"
 7) "shanghai"
 8) "2"
 9) "guangzhou"
10) "3"
11) "shenzhen"
12) "4"
13) "tianjin"
14) "7"
15) "12"
16) "100"
17) "324"
18) "2324"
127.0.0.1:6379> zrange zset1 0 1 withscores # 显示下标0 到 1 的元素
1) "guzhou"
2) "1"
3) "peiking"
4) "1"
127.0.0.1:6379> zrevrange zset1 0 -1 withscores  #显示按照权重从打到小的全部显示。重点:0 -1 代表全部。
 1) "324"
 2) "2324"
 3) "12"
 4) "100"
 5) "tianjin"
 6) "7"
 7) "shenzhen"
 8) "4"
 9) "guangzhou"
10) "3"
11) "shanghai"
12) "2"
13) "guzhou2"
14) "2"
15) "peiking"
16) "1"
17) "guzhou"
18) "1"
127.0.0.1:6379> zcard zset1    #统计集合中有多少元素
(integer) 9
127.0.0.1:6379> zcount zset1 1 5  #统计权重 1 到 5 中间有多少元素 。重点:权重
(integer) 6
127.0.0.1:6379> zincrby zset1 5 guangzhou  #为广州这个元素增加 5 个权重。
"8"
127.0.0.1:6379> zrank zset1 guzhou  #获取元素的索引、下标 从小到大排序
(integer) 0
127.0.0.1:6379> zrank zset1 shanghai
(integer) 3
127.0.0.1:6379> zscore zset1 shanghai #获取集合元素中 shanghai的权重、分值
"2"
127.0.0.1:6379> 
127.0.0.1:6379> zrevrank zset1 shanghai  #获取元素的索引、下标 从大到小排序
(integer) 5
127.0.0.1:6379> 
127.0.0.1:6379> zrevrange zset1 0 -1 withscores
 1) "324"
 2) "2324"
 3) "12"
 4) "100"
 5) "guangzhou"
 6) "8"
 7) "tianjin"
 8) "7"
 9) "shenzhen"
10) "4"
11) "shanghai"
12) "2"
13) "guzhou2"
14) "2"
15) "peiking"
16) "1"
17) "guzhou"
18) "1"
127.0.0.1:6379> zrem zset1 guzhou  #删除集合中一个元素或者多个元素,空格 隔开
(integer) 1
127.0.0.1:6379> zrevrange zset1 0 -1 withscores
 1) "324"
 2) "2324"
 3) "12"
 4) "100"
 5) "guangzhou"
 6) "8"
 7) "tianjin"
 8) "7"
 9) "shenzhen"
10) "4"
11) "shanghai"
12) "2"
13) "guzhou2"
14) "2"
15) "peiking"
16) "1"
127.0.0.1:6379> zrem zset1 324 12 #删除集合中一个元素或者多个元素,空格 隔开
(integer) 2
127.0.0.1:6379> zrevrange zset1 0 -1 withscores
 1) "guangzhou"
 2) "8"
 3) "tianjin"
 4) "7"
 5) "shenzhen"
 6) "4"
 7) "shanghai"
 8) "2"
 9) "guzhou2"
10) "2"
11) "peiking"
12) "1"
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> zremrangebyrank zset1 3 5 #按照索引删除区间(从小到大)
(integer) 3
127.0.0.1:6379> zrevrange zset1 0 -1 withscores
1) "shanghai"
2) "2"
3) "guzhou2"
4) "2"
5) "peiking"
6) "1"
127.0.0.1:6379> zremrangebyscore zset1 2 5 #按照权重范围删除元素
(integer) 2
127.0.0.1:6379> zrevrange zset1 0 -1 withscores
1) "peiking"
2) "1"
127.0.0.1:6379> 

 

有序集合基本上也都讲述完成,主要大家多多练习熟悉语法之后操作起来会比较方便。这里都演示了命令和说明,大家加以理解,应该可以融会贯通。希望大家都能快速成长。

总结篇:

为了演示过程啊,能让大家看懂啊。好心累!希望大家点赞支持。不枉费博主一片苦心。

@版权声明:51CTO独家出品,未经允许不能转载,否则追究法律责任

版权声明:
作者:WaterBear
链接:https://l-t.top/2114.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录