目录
[BLPOP / BRPOP](#BLPOP / BRPOP)
[ZADD 选项查看](#ZADD 选项查看)
list
-
链表相当于数组或者是顺序表
-
在 list 中有下标的概念
-
list 是有序的
-
从左向右的下标是,从0开始,一直向后增加
-
从右向左的下标是,从最右边开始,下标为 -1 ,向左一直减少
LPUSH
- 链表中插入数据
sql
lpush key value [value ...]
-
返回值是插入后,里面元素的总个数
-
lpush 是头插
-
可以一次插入多个元素
-
插入几个元素
sql127.0.0.1:6379> lpush key 111 222 333 3
-
继续插入到同一个 key里面
sql127.0.0.1:6379> lpush key 444 555 666 6
LRANGE
- 查看链表中的元素
sql
lrange key start stop
-
返回值就是查到的元素
-
start 表示从那个位置开始
-
stop 表示从那个位置结束
-
这两个位置都是闭区间
-
其中这两个位置可以输入负数,负数表示的是从后面开始计算。
-
查看插入的全部数据
sql127.0.0.1:6379> lrange key 0 -1 666 555 444 333 222 111
0 表示从第 0 个位置开始,-1 表示到倒数第一个位置
-
上面查看插入的数据使用的是下标
-
既然是下标,那么就有可能会越界
-
那么 redis 对于越界是怎么样子的?
-
输入一段有问题的范围
sql127.0.0.1:6379> lrange key 0 6 666 555 444 333 222 111
-
继续输入有问题的范围
sql127.0.0.1:6379> lrange key 0 100 666 555 444 333 222 111
sql127.0.0.1:6379> lrange key 10 100
sql127.0.0.1:6379> lrange key 10 -100
上面的情况下 redis 并没有报错,而是讲你输入的范围里面有数据就取出来,没有数据就是空。
redis 这样设定,那么也就证明 redis 的容错能力跟强。
LPUSHX
- key 存在才插入
sql
lpushx key value
-
返回值是插入后的总共元素个数
-
该命令是只有 key 存在才能插入
-
一次性也可以插入多个值
-
插入一个元素
sql127.0.0.1:6379> lpushx key 100 7
-
插入多个元素
sql127.0.0.1:6379> lpushx key 200 300 9
-
插入到不存在的 key 中
sql127.0.0.1:6379> lpushx key1 200 300 0
RPUSH
- 尾插
sql
rpush key value [value ...]
-
返回值是插入后元素的所有个数
-
可以一次插入多个值
-
该命令是尾插
-
插入元素
sql127.0.0.1:6379> rpush key1 111 222 333 3
-
继续插入
sql127.0.0.1:6379> rpush key1 444 555 666 6
-
查看插入元素
sql127.0.0.1:6379> lrange key1 0 -1 111 222 333 444 555 666
RPUSHX
- 尾插到存在的 key 中
sql
rpushx key value
-
返回值是插入后元素的总个数
-
只能插入到存在的 key 中
-
可以插入多个元素
-
插入单个元素
sql127.0.0.1:6379> rpushx key1 100 7
-
插入多个元素
sql127.0.0.1:6379> rpushx key1 200 300 9
-
插入到不存在的 key 中
sql127.0.0.1:6379> rpushx key2 400 0
LPOP
- 头删
sql
lpop key
-
删除左侧元素
-
返回值就是删除掉的元素,如果没有元素,返回 nil
-
在 redis 6.2 以上版本该命令后面还有一个 count ,表示删除几个
-
删除元素
sql127.0.0.1:6379> lpop key1 111
-
查看
sql127.0.0.1:6379> lrange key1 0 -1 222 333 444 555 666 100 200 300
-
删除全部元素
sql127.0.0.1:6379> lpop key1 222 127.0.0.1:6379> lpop key1 333 127.0.0.1:6379> lpop key1 444 127.0.0.1:6379> lpop key1 555 127.0.0.1:6379> lpop key1 666 127.0.0.1:6379> lpop key1 100 127.0.0.1:6379> lpop key1 200 127.0.0.1:6379> lpop key1 300 127.0.0.1:6379> lpop key1
删除到最后删成了 nil,但是这里没有显示出来
RPOP
- 尾删
sql
rpop key
-
删除最右边的元素
-
剩下的特性和 lpop 一样
-
删除元素
sql127.0.0.1:6379> lpush key 111 222 333 3 127.0.0.1:6379> rpop key 111
-
查看删除后的结果
sql127.0.0.1:6379> lrange key 0 -1 333 222
-
全部删除
sql127.0.0.1:6379> rpop key 222 127.0.0.1:6379> rpop key 333 127.0.0.1:6379> rpop key
全部删除后,就变成 nil 了
-
上面的 list 可以灵活使用lpush 或者 rpush 或者 rpop 或者 lpop ,就可以达到栈或者队列的效果
LINDEX
- 返回指定位置的元素
sql
lindex key index
-
返回值是指定位置的元素
-
下标从 0 开始
-
如果指定位置不在范围内,那么久返回 nil
-
index 还可以是负数,负数表示从后向前的位置
-
先插入元素
sql127.0.0.1:6379> lpush key 10 20 30 40 50 5 127.0.0.1:6379> lrange key 0 -1 50 40 30 20 10
-
查看元素
sql127.0.0.1:6379> lindex key 3 20
-
输入负数
sql127.0.0.1:6379> lindex key -1 10
-
查看不存在的位置
sql127.0.0.1:6379> lindex key 10
LINSERT
- 插入在指定元素前或者后
sql
linsert key BEFORE|AFTER pivot value
-
返回值就是插入后的总共元素个数,如果该元素不存在,那么返回 -1
-
pivot 表示插入该基准值
-
BEFORE | AFTER 表示插入到该基准值的前或者后
-
由于list 可以重复,所以基准值可能存在多个,但是 redis 是从左边开始查找,遇到的第一个基准值
-
插入指定元素前面
sql127.0.0.1:6379> linsert key before 30 99 6 127.0.0.1:6379> lrange key 0 -1 50 40 99 30 20 10
-
插入到指定元素后面
sql127.0.0.1:6379> lrange key 0 -1 50 40 99 30 88 20 10
-
插入到不存在的位置
sql127.0.0.1:6379> linsert key after 100 10 -1
LLEN
- 返回 list 里面元素的个数
sql
llen key
-
返回值是返回 key 对应 list 里面的元素个数,如果没有对应的 key,则返回 0
-
查看 key 里面的元素个数
sql127.0.0.1:6379> llen key 7
-
查看不存在的 key
sql127.0.0.1:6379> llen key1 0
LREM
- 删除指定元素 count 个
sql
lrem key count value
-
value 表示要删除的元素
-
count 表示删除几个值为 value 的元素
-
但是 count 可以为 0 和 负数
-
count > 0 表示:从左往右开始删除 count 个元素
-
count < 0 表示:从右往左开始删除 count 个元素
-
count = 0 表示:删除值为 value 的全部元素
-
返回值就是删除成功的元素的个数
-
构建一个 list
sql127.0.0.1:6379> rpush key 1 2 3 4 4 127.0.0.1:6379> rpush key 1 2 3 4 8 127.0.0.1:6379> rpush key 1 2 3 4 12 127.0.0.1:6379> rpush key 1 2 3 4 16
sql127.0.0.1:6379> lrange key 0 -1 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4
-
删除从左往右数的 2 个 1
sql127.0.0.1:6379> lrem key 2 1 2
-
查看
sql127.0.0.1:6379> lrange key 0 -1 2 3 4 2 3 4 1 2 3 4 1 2 3 4
-
重新构造案例
sql127.0.0.1:6379> flushall OK 127.0.0.1:6379> rpush key 1 2 3 4 4 127.0.0.1:6379> rpush key 1 2 3 4 8 127.0.0.1:6379> rpush key 1 2 3 4 12 127.0.0.1:6379> rpush key 1 2 3 4 16
-
删除从右往左数的 2 个 1
sql127.0.0.1:6379> lrem key -2 1 2
-
查看
sql127.0.0.1:6379> lrange key 0 -1 1 2 3 4 1 2 3 4 2 3 4 2 3 4
-
重新构造案例
-
删除全部的 1
sql127.0.0.1:6379> lrem key 0 1 4
-
查看
sql127.0.0.1:6379> lrange key 0 -1 2 3 4 2 3 4 2 3 4 2 3 4
LTRIM
- 删除指定范围的元素
sql
ltrim key start stop
-
start 表示起始位置
-
stop 表示终止位置
-
这两个位置是闭区间
-
但是这里并不是删除 start ~ stop 中间的元素,而是保留该闭区间的元素,删除该范围外的所有元素
-
这两个位置同样可以为负数
-
返回值,删除成功
-
构建案例
sql127.0.0.1:6379> rpush key 1 2 3 4 5 6 7 8 8
-
删除 保留下标从 2 开始到 下标 5 的所有元素
sql127.0.0.1:6379> ltrim key 2 5 OK
-
查看
sql127.0.0.1:6379> lrange key 0 -1 3 4 5 6
LSET
- 修改指定位置的元素
sql
lset key index value
-
index 可以为负数
-
如果超出范围,则或报错
-
返回值,删除成功的话,返回 ok
-
构建案例
sql127.0.0.1:6379> rpush key 1 2 3 4 5 6 7 8 8
-
修改 index 为 5 的元素,修改为 60
sql127.0.0.1:6379> lset key 5 60 OK
-
查看
sql127.0.0.1:6379> lrange key 0 -1 1 2 3 4 5 60 7 8
-
修改不存在的范围
sql127.0.0.1:6379> lset key 10 0 ERR index out of range
BLPOP / BRPOP
-
这两个命令也是删除,功能基本和 lpop 和 rpop 的功能额基本相同
-
但是 blpop 和 brpop 是阻塞删除
-
如果 list 中有元素,那么 blpop 和 brpop 和 lpop 和 rpop 的功能一样
-
但是如果 list 中没有元素, 那么 lpop 和 rpop 就会返回 nil
-
而 blpop 和 brpop 则会阻塞
-
但是阻塞本本会根据 timeout,阻塞一段时间,期间 redis 可以执行其他命令
-
timeout 也是可以自行设置的
-
虽然说是阻塞,但是 blpop 和 brpop 并不会对 redis 产生负面影响
-
对于同一个元素来说,哪一个客户端先调用了 pop ,那么就先被哪一个客户端获取到
sql
blpop key [key ...] timeout
sql
brpop key [key ...] timeout
-
可以删除多个 key 里面的元素
-
timeout 的单位是 秒
-
返回值是一个而二元组
-
构建案例
sql127.0.0.1:6379> rpush key 1 2 3 4 5 5
-
对一个非空 key 进行操作
sql127.0.0.1:6379> blpop key 0 key 1
这里看到返回值其实是一个二元组,是哪一个 key 里面删除的,删除的元素是哪个。
-
对空 key 进行操作
sql127.0.0.1:6379> blpop key1 5
对空 key 操作,这里就会阻塞5秒,然后返回 nil
-
对空 key 操作,然后又其他客户端插入数据
sql127.0.0.1:6379> blpop key1 100
-
刚开始是阻塞的
-
由其他客户端插入数据后
sql127.0.0.1:6379> rpush key1 10 1
-
阻塞删除的客户端立马返回数据
sql127.0.0.1:6379> blpop key1 100 key1 10
-
其中 brpop 和 blpop 的阻塞时一样的,所以这里也就不演示了
编码方式
-
ziplist: 压缩链表
-
linkedlist: 普通链表
-
但是这是之前的 list 采用的编码方式
-
现在的 list 采用的编码方式时 quicklist
-
quicklist 是一个链表,该链表里面的每个元素都是 ziplist
-
二 quicklist 里面的 ziplist 的长度都不会太长
set
-
无序集合
-
集合就是把一些右有关联的数据放到一起
-
集合中的元素是有序的!例如:[1,2,3] 和 [2,1,3] 是不同的
-
集合中的元素是不能重复的(唯一的)
-
集合中的每个元素也都是 string 类型的
SADD
- 向一个集合添加元素
sql
sadd key member [member ...]
-
该命令可以一次添加一个元素,也可以一次添加多个元素
-
返回值就是本次添加成功的个数
-
添加元素
sql127.0.0.1:6379> sadd key 1 2 3 4 (integer) 4
表示我们添加成功 4 个元素
-
添加重复元素
sql127.0.0.1:6379> sadd key1 1 1 2 3 4 (integer) 4
这次添加了两个 1,下面显示我们添加了4 个元素,显然是重复的 1 值添加了一个
SMEMBERS
- 查看集合中的元素
sql
smembers key
-
返回值就是对应 key 中所有的元素
-
如果没有返回空
-
查看
sql127.0.0.1:6379> smembers key 1) "1" 2) "2" 3) "3" 4) "4"
SISMEMBER
- 查看一个元素是否在集合中
sql
sismember key member
-
返回值0 或者 1
-
0 表示没有
-
1 表示有
-
查看元素是否存在
sql127.0.0.1:6379> sismember key 1 (integer) 1 127.0.0.1:6379> sismember key 100 (integer) 0
SPOP
- 随机删除一个 key 里面的元素
sql
spop key [count]
-
count 表示删除几个元素,如果不写,就代表随机删除1 个,写了的话,那么就是我们写的个数
-
返回值,删除的元素
-
如果删除没有的 key 那么返回 nil
-
构建案例
sql127.0.0.1:6379> sadd key 1 2 3 4 (integer) 4
-
删除一个值
sql127.0.0.1:6379> spop key "1"
-
删除全部的值
sql127.0.0.1:6379> spop key "1" 127.0.0.1:6379> spop key "3" 127.0.0.1:6379> spop key "2" 127.0.0.1:6379> spop key "4"
这就是删除的顺序,那么下一次我们还是随机删除吗?我们的随即删除是真随机还是对不同的集合删除的顺序不同?下面我们试一下。
-
重新构建
sql127.0.0.1:6379> sadd key 1 2 3 4 (integer) 4
-
全部删除
sql127.0.0.1:6379> spop key "2" 127.0.0.1:6379> spop key "1" 127.0.0.1:6379> spop key "4" 127.0.0.1:6379> spop key "3"
这一次我们的删除顺序是和上一次时不同的,实际上,在官方文档里面也是表明了,redis 的spop 的删除就是随机删除。
SCARD
- 获取集合中元素的个数
sql
scard key
SRANDMEMBER
- 随机获得一个数
sql
srandmember key [count]
-
count 为 获取到随机数的个数
-
返回值就是获取到的随机值
-
随机获取一个
sql127.0.0.1:6379> srandmember key "4"
SMOVE
- 将一个元素从一个集合移动到另一个集合
sql
smove source destination member
-
该命令就表示把 memeber 从 source 移动到 destination
-
返回值,移动成功,返回 1,否则返回 0
-
移动元素
sql
127.0.0.1:6379> smove key key1 1
(integer) 1
127.0.0.1:6379> smove key key1 2
(integer) 1
-
查看
sql127.0.0.1:6379> smembers key 1) "3" 2) "4" 127.0.0.1:6379> smembers key1 1) "1" 2) "2" 3) "5" 4) "6" 5) "7" 6) "8"
-
那么如果从 souce 里面移动的元素到 destination 里面有重复元素呢?
sql127.0.0.1:6379> sadd key 1 (integer) 1 127.0.0.1:6379> sadd key1 1 2 3 4 (integer) 4
将 1 从 key 里面移动到 key1 里面
sql127.0.0.1:6379> smove key key1 1 (integer) 1
-
查看
sql127.0.0.1:6379> smembers key (empty list or set) 127.0.0.1:6379> smembers key1 1) "1" 2) "2" 3) "3" 4) "4"
-
那么如果 souce 里面没有要移动的元素呢?
sql127.0.0.1:6379> sadd key 2 3 4 (integer) 3 127.0.0.1:6379> sadd key1 5 6 7 8 (integer) 4
将 1 从 souce 移动到 destination 里面
sql127.0.0.1:6379> smove key key1 1 (integer) 0
这里移动失败返回 0
SREM
- 删除集合中的元素
sql
srem key member [member ...]
-
可以一次删除多个值
-
返回值就是删除成功的个数
-
构建案例
sql127.0.0.1:6379> sadd key 1 2 3 4 (integer) 4
-
删除一个值
sql127.0.0.1:6379> srem key 4 (integer) 1
-
删除多个值
sql127.0.0.1:6379> srem key 1 2 3 (integer) 3
SINTER
- 求多个集合的交集
sql
sinter key [key ...]
-
返回值就是求到的交际的元素
-
构建案例
sql127.0.0.1:6379> sadd key1 1 2 3 4 (integer) 4 127.0.0.1:6379> sadd key2 3 4 5 6 (integer) 4
-
求交集
sql127.0.0.1:6379> sinter key1 key2 1) "3" 2) "4"
SINTERSTORE
- 也是求交集
sql
sinterstore destination key [key ...]
-
但是返回值不同,这个命令的返回值是交集元素的个数
-
destination 表示求到的交集存储到该key 里面
-
求交集
sql127.0.0.1:6379> sinterstore key3 key1 key2 (integer) 2
-
查看
sql127.0.0.1:6379> smembers key3 1) "3" 2) "4"
SUNION
- 查询集合的并集
sql
sunion key [key ...]
-
返回值就是查询到的集合的并集
-
查询并集
sql127.0.0.1:6379> sunion key1 key2 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6"
SUNIONSTORE
- 也是查询并集
sql
sunionstore destination key [key ...]
-
但是返回值不同,该命令返回值是查询到并集的个数
-
destination 是查询到的并集存储的 key
-
查看并集
sql127.0.0.1:6379> sunionstore key4 key1 key2 (integer) 6
-
查询
sql127.0.0.1:6379> smembers key4 1) "1" 2) "2" 3) "3" 4) "4" 5) "5" 6) "6"
SDIFF
- 查询集合的差集
sql
sdiff key [key ...]
-
返回值就是查询到的差集
-
查询差集
sql127.0.0.1:6379> sdiff key1 key2 1) "1" 2) "2"
-
由于 A 和 B 的差集 与 B 和 A 的差集是不同的,所以我们换一下位置
sql127.0.0.1:6379> sdiff key2 key1 1) "5" 2) "6"
SDIFFSTORE
- 查询差集
sql
sdiffstore destination key [key ...]
-
返回值是查询到差集的个数
-
destination 是查询到的差集的存放的 key
-
查询差集
sql127.0.0.1:6379> sdiffstore key5 key1 key2 (integer) 2
-
查询
sql127.0.0.1:6379> smembers key5 1) "1" 2) "2"
编码方式
-
intset:整数集合,当元素均为整数,并且元素个数不是很多的时候,使用 intset
-
hashtable:哈希表
zset
-
有序结合(升序或者降序)
-
排序规则:给 zset 引入了一个数属性 分数(score),浮点类型
-
每个 member 都会安排一个分数
-
进行排序的时候,就是一宅次数的分数大小来进行升序或者降序排序
-
里面的元素是不可以重复的,但是分数可以重复
-
zset 主要还是存储 member ,分数只是一个辅助
ZADD
- 添加 zadd 类型元素
sql
zadd key [NX|XX] [CH] [INCR] score member [score member ...]
-
[] 表示可选项
-
zadd 不仅有 member 还有 score ,所以在添加元素的时候还需要添加 score
-
NX 表示如果没有 member 那么就插入,有的话就不插入
-
XX 表示如果有 member 那么就跟新 score 否则就不跟新
-
如果 NX 和 XX 都不带的话,表示如果没有member 就插入 ,有的话就跟新 score
-
INCR 表示跟新 score 为新值,可以指定新值进行自增或者自减
-
CH 表示修改了分值的成员数量,包括添加新的成员和跟新了已存在的成员的分值
-
添加元素
sql127.0.0.1:6379> zadd key 98 貂蝉 99 林黛玉 97 女儿国王 3
ZRANGE
- 查看 zadd 类型数据
sql
zrange key start stop [WITHSCORES]
-
返回值就是查到的数据
-
start 和 stop 为范围,可以为负数
-
WITHSOCORES 表示显示的时候带上分数
-
查询
sql127.0.0.1:6379> zrange key 0 -1 女儿国王 貂蝉 林黛玉
-
带分数查询
sql127.0.0.1:6379> zrange key 0 -1 withscores 女儿国王 97 貂蝉 98 林黛玉 99
-
插入member 重复但是 score 不重复的值
sql127.0.0.1:6379> zadd key 100 林黛玉 0
-
查看
sql127.0.0.1:6379> zrange key 0 -1 withscores 女儿国王 97 貂蝉 98 林黛玉 100
ZADD 选项查看
-
NX:不存在即插入
sql127.0.0.1:6379> zadd key 110 貂蝉 0
-
查看
sql127.0.0.1:6379> zrange key 0 -1 withscores 女儿国王 97 林黛玉 100 貂蝉 110
-
XX :存在就修改,不存在不插入
sql127.0.0.1:6379> zadd key xx 95 大桥 0
-
查看
sql127.0.0.1:6379> zrange key 0 -1 withscores 女儿国王 97 林黛玉 100 貂蝉 110
-
CH:不存在插入,存在就修改 score
sql127.0.0.1:6379> zadd key ch 99 女儿国王 1
-
查看
sql127.0.0.1:6379> zrange key 0 -1 withscores 女儿国王 99 林黛玉 100 貂蝉 110
-
INCR:不存在插入,存在就修改 score,返回修改后的分数
sql127.0.0.1:6379> zadd key incr 66 廉颇 66
-
查看
sql127.0.0.1:6379> zrange key 0 -1 withscores 廉颇 66 女儿国王 99 林黛玉 100 貂蝉 110
ZCARD
- 获取当前 key 里面的元素个数
sql
zcard key
ZCOUNT
- 返回在一定分数范围内的元素个数
sql
zcount key min max
-
min 表示底分数线
-
max 表示高分数线
-
这两个分数线都是闭区间
-
如果想要是开区间,可以加 '('
-
min 和 max 还可以是 inf 和 -inf
-
查看所有人
sql127.0.0.1:6379> zrange key 0 -1 withscores 廉颇 66 西施 95 女儿国王 99 林黛玉 100 貂蝉 110
-
查看分数在 95 到 110 的人
sql127.0.0.1:6379> zcount key 95 110 4
-
不想包含 95
sql127.0.0.1:6379> zcount key (95 110 3
-
不想包含 110
sql127.0.0.1:6379> zcount key 95 (110 3
是的!上面并没有写错
-
两个都不想包含
sql127.0.0.1:6379> zcount key (95 (110 2
在说明一下,上面没有写错,就是这么个格式
-
使用 inf 和 -inf
sql127.0.0.1:6379> zcount key -inf inf 5
ZREVRANGE
- 获取元素逆序的结果
sql
zrevrange key start stop [WITHSCORES]
-
其他条件个 zrange 相同
-
查看逆序的元素
sql127.0.0.1:6379> zrevrange key 0 -1 貂蝉 林黛玉 女儿国王 西施 廉颇
-
也可以带 withscores
sql127.0.0.1:6379> zrevrange key 0 -1 withscores 貂蝉 110 林黛玉 100 女儿国王 99 西施 95 廉颇 66
ZRANGEBYSCORE
- 该命令可以通过分数获得元素
sql
zrangebyscore key min max [WITHSCORES] [LIMIT offset count]
-
limit offset count 可以限制获取到的个数
-
其余的和zrange 相同
-
获取元素
sql127.0.0.1:6379> zrangebyscore key 95 110 西施 女儿国王 林黛玉 貂蝉
-
剩下的就不进行示范了
ZPOPMAX
- 删除有序集合中 score 最大的值
sql
zpopmax key [count]
-
count 表示删除的个数,不写代表 1
-
返回值是删除后的元素(member 和 score)
-
删除一个元素
sql127.0.0.1:6379> zpopmax key 貂蝉 110
-
删除多个元素
sql127.0.0.1:6379> zpopmax key 2 林黛玉 100 女儿国王 99
BZPOPMAX
- 阻塞删除分数最大的值
sql
bzpopmax key [key ...] timeout
-
如果当前 key 有数据,那么就直接删除
-
如当前 key 没有数据,那么就会阻塞
-
timeout 表示超时时间,单位秒
-
如果没有数据,超出超时时间就会返回
-
返回值是 key 与 删除的元素还有 score
-
删除空 key
sql127.0.0.1:6379> flushall OK 127.0.0.1:6379> bzpopmax key 1
表示阻塞一秒,如果一秒内还没有数据,那么就会返回 nil
-
删除有数据的 key
sql127.0.0.1:6379> bzpopmax key 0 key hello 1
ZPOPMIN
- 删除 score 最小的值
sql
zpopmin key [count]
- 该命令与 zpopmax 基本一样所以这里也就不多解释
BZPOPMIN
- 阻塞删除 score 的最小值
sql
bzpopmin key [key ...] timeout
- 该命令与 bzpopmax 一样,不解释
ZRANK
- 查看一个元素的排名
sql
zrank key member
-
返回值是该元素的根据 score 的排名,默认升序
-
如果没有对应的 key 那么返回空
-
构建案例
sql127.0.0.1:6379> zadd key 10 zhangsan 20 lisi 30 wangwu 3
-
查询元素
sql127.0.0.1:6379> zrank key zhangsan 0 127.0.0.1:6379> zrank key lisi 1 127.0.0.1:6379> zrank key oo
ZREVRANK
- 返回指定元素的排名
sql
zrevrank key member
-
该命令和前面的 ZREVRANGE 是很相似的,都是从后往前
-
所以该命令获取到的排名是降序的排名
-
剩下的和 ZRANK 一样
ZREM
- 删除指定的元素
sql
zrem key member [member ...]
-
一次可以删除多个元素
-
返回值就是删除成功的元素个数
-
构建案例
sql127.0.0.1:6379> flushall OK 127.0.0.1:6379> zadd key 10 zhangsan 20 lisi 30 wangwu 40 zhaoliu 50 tianqi 5
-
删除元素
sql127.0.0.1:6379> zrem key zhaoliu tianqi 2
-
查看是否删除
sql127.0.0.1:6379> zrange key 0 -1 zhangsan lisi wangwu
ZREMRANGEBYRANK
- 删除一个范围内的元素
sql
zremrangebyrank key start stop
-
根据下标的范围删除该范围内的元素
-
start 和 stop 是闭区间,也可以为负数
-
返回值是删除成功元素的个数
-
构建案例
sql127.0.0.1:6379> flushall OK 127.0.0.1:6379> zadd key 10 zhangsan 20 lisi 30 wangwu 40 zhaoliu 50 tianqi 5
-
删除一个范围内的元素
sql127.0.0.1:6379> zremrangebyrank key 1 2 2
-
查看是否删除成功
sql127.0.0.1:6379> zrange key 0 -1 zhangsan zhaoliu tianqi
ZREMRANGEBYSCORE
- 删除一个范围的元素
sql
zremrangebyscore key min max
-
不过这个范围是根据分数的范围
-
剩下的和上面的命令一样
-
构建案例
sql127.0.0.1:6379> flushall OK 127.0.0.1:6379> zadd key 10 zhangsan 20 lisi 30 wangwu 40 zhaoliu 50 tianqi 5
-
删除元素
sql127.0.0.1:6379> zremrangebyscore key 30 50 3
-
查看是否被删除
sql127.0.0.1:6379> zrange key 0 -1 zhangsan lisi
ZINCRBY
- 对指定元素的分数进行加一个值
sql
zincrby key increment member
-
返回值就是该元素的分数增加指定分数后的分数
-
如果没有对应的 member 默认从 0 开始
-
构建案例
sql127.0.0.1:6379> flushall OK 127.0.0.1:6379> zadd key 10 zhangsan 20 lisi 30 wangwu 40 zhaoliu 50 tianqi 5
-
对空member 进行增加
sql127.0.0.1:6379> zincrby key 1 sunba 1
-
查看
sql127.0.0.1:6379> zrange key 0 -1 withscores sunba 1 zhangsan 10 lisi 20 wangwu 30 zhaoliu 40 tianqi 50
-
对指定元素进行增加一个值
sql127.0.0.1:6379> zincrby key 100 zhangsan 110
-
查看
sql127.0.0.1:6379> zrange key 0 -1 withscores sunba 1 lisi 20 wangwu 30 zhaoliu 40 tianqi 50 zhangsan 110
对于 zset 在 6.2 版本后有 inter union zdiff 但是现在的测试版本是 5 系列的,所以并没有上述的命令,但是该版本有下面的两个命令:
ZINTERSOTORE
- 求交集
sql
zinterstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
-
该命令就是求交集
-
求到的交集存储到 destination 中
-
numkeys 表示求交集的 key 一共有多少个
-
weights 表示权重
-
权重就是在求交集的时候,每个 key 里面的分数乘对应的权重
-
agreegate 表示求交集的时候分数如何处理,这里默认是分数求和,还可以取最大值,或者最小值
-
构建案例
sql127.0.0.1:6379> flushall OK 127.0.0.1:6379> zadd key 10 zhangsan 20 lisi 30 wangwu 3 127.0.0.1:6379> zadd key1 15 zhangsan 25 lisi 35 zhaoliu 3
-
求交集,不带任何可选项
sql127.0.0.1:6379> zinterstore key2 2 key key1 2
-
查看求到的交集
sql127.0.0.1:6379> zrange key2 0 -1 withscores zhangsan 25 lisi 45
如果什么都不带的话,就是默认,这里默认的分数就是 sum,不带权重的话,每个 key 的分数就是本身的分数
-
求交集,带权重
sql127.0.0.1:6379> zinterstore key3 2 key key1 weights 10 10 2
-
查看不到的交集
sql127.0.0.1:6379> zrange key3 0 -1 withscores zhangsan 250 lisi 450
-
求交集,带aggregate
sql127.0.0.1:6379> zinterstore key4 2 key key1 aggregate max 2
-
查看求到的交集
sql127.0.0.1:6379> zrange key4 0 -1 withscores zhangsan 15 lisi 25
ZUNIONSTORE
- 求并集
sql
zunionstore destination numkeys key [key ...] [WEIGHTS weight] [AGGREGATE SUM|MIN|MAX]
-
哪些参数和上面的那个命令的参数相同
-
下面也就不多演示了
编码方式
-
ziplist:如果当前集合中的元素比较少,或者元素体积小,就会使用 ziplist
-
skiplist:如果当前元素个数比较多,或者是单个元素的提交较大,就会使用 skiplist