Redis-5-列表与集合的一些常用命令

2019-04-28  本文已影响0人  冷风_f818

前文中,介绍了String数据类型的一些常用的命令,那么下面来看一下一些针对列表与集合的常用命令

列表(list)

列表是Redis中另外一种数据类型,下面我们来看看列表中一些基本的操作命令

lpush

语法如下:

LPUSH key value [value ...]

将一个或多个值插入到列表key的表头,如果有多个value,则会按从左到右的顺序依次插入表头,具体使用如下:

172.16.12.3:6379> lpush k1 v1 v2 v3
(error) WRONGTYPE Operation against a key holding the wrong kind of value
172.16.12.3:6379> del k1
(integer) 1
172.16.12.3:6379> lpush k1 v1 v2 v3
(integer) 3
172.16.12.3:6379> lpush k1 v4 v5
(integer) 5

来看一下上面的命令,我在第一次执行的时候,报了一个错,因为我们之前k1对应的值不是一个list,就会报错.

第二点,lpush命令的返回值是push操作后的list的长度,如上面,我第一次push了3个value进去, 长度就是3,然后又加了两个.那长度就是5

lrange

返回列表key中的指定 区间内的元素,区间以偏移量start和stop指定,start和stop都以0开始,即0代表第一个元素,1代表第二个元素... 以此类推,也可以使用负数作为下标,以-1表示列表的最后一个元素,-2表示倒数第二个元素.... 以此类推,具体使用如下:

172.16.12.3:6379> lrange k1 0 -2
1) "v5"
2) "v4"
3) "v3"
4) "v2"
172.16.12.3:6379> lrange k1 0 5
1) "v5"
2) "v4"
3) "v3"
4) "v2"
5) "v1"

rpush

rpush和lpush的功能基本一致,只不过rpush中,value是按照从右到左的顺序依次插入的,使用如下:

172.16.12.3:6379> get k2
"c"
172.16.12.3:6379> del k2
(integer) 1
172.16.12.3:6379> rpush k2 1 2 3 4 5
(integer) 5
172.16.12.3:6379> lrange k2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"

rpop

rpop命令,可以移除列表中最后一个元素,并且返回该元素的值,使用如下:

172.16.12.3:6379> rpop k2
"5"
172.16.12.3:6379> lrange k2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
172.16.12

lpop

lpop和rpop类似,只不过移除的是列表中的第一个元素,使用如下:

172.16.12.3:6379> lpop k2
"1"
172.16.12.3:6379> lrange k2 0 -1
1) "2"
2) "3"
3) "4"

lindex

lindex命令,可以返回指定下标对应的元素的值,可以用正数下标,0表示第一个元素,也可以用负数下标, -1表示最后一个元素,使用如下:

172.16.12.3:6379> lindex k2 0
"2"
172.16.12.3:6379> lindex k2 -1
"4"

ltrim

ltrim命令,可以对一个列表进行修剪,需要指定一个下标开始值和结束值, 不在这个区间的元素都会被删除掉, 下标的取值和上面都一样的,使用如下:

172.16.12.3:6379> lrange k1 0 -1
1) "v5"
2) "v4"
3) "v3"
4) "v2"
5) "v1"
172.16.12.3:6379> ltrim k1 0 2
OK
172.16.12.3:6379> lrange k1 0 -1
1) "v5"
2) "v4"
3) "v3"

blpop

BLPOP是阻塞式列表的弹出原语,blpop是lpop的阻塞版本

当给定列表内,没有任何元素可以供弹出的时候,连接将被blpop命令阻塞, 当 给定的是多个key时,按参数key的先后顺序依次检查各个列表,弹出一个非空列表的第一个元素

使用这个命令的时候,需要指定阻塞的时长,单位是秒,如果在规定时间内没有元素可供弹出,则阻塞结束,返回结果是key-value的组合,具体使用如下:

172.16.12.3:6379> lrange k1 0 -1
1) "v5"
2) "v4"
3) "v3"
172.16.12.3:6379> blpop k1 5
1) "k1"
2) "v5"
172.16.12.3:6379> blpop k1 5
1) "k1"
2) "v4"
172.16.12.3:6379> blpop k1 5
1) "k1"
2) "v3"
172.16.12.3:6379> blpop k1 5
(nil)
(5.02s)

来看一下上面的命令,最开始集合是有三个元素的,然后每次给定阻塞时长是5秒,弹出第一个元素,然后一共执行三次,列表中也就没有元素了,这时候,执行第四次弹出的操作,就可以看到,这里阻塞了5秒中之后,发现,还是没有可以弹出的元素,然后就阻塞结束,返回nil了

集合(set)

接下来看一些针对集合的操作命令

sadd

sadd命令,可以添加一个或多个指定的member元素到集合的key中, 如果值在这个集合中存在的话就忽略掉,如果集合key不存在就先新建集合,然后添加member元素到集合,具体使用如下:

172.16.12.3:6379> sadd k1 v1 v2
(integer) 2
172.16.12.3:6379> sadd k1 v2
(integer) 0

第一个命令添加了v1,v2,然后下面又去添加v2,是直接被忽略掉了,已经存在的元素不会被加进去, 这里的返回值是新添加到集合里的元素的数量,不包括已经存在于集合中的元素

srem

srem命令可以在key集合中移除指定的元素,如果指定的元素不存在,则忽略,如果key集合不存在,则被视为一个空的集合,返回0,使用如下:

172.16.12.3:6379> srem k1 v1
(integer) 1
172.16.12.3:6379> srem k1 v3
(integer) 0

sismember

sismember可以返回指定的值,是不是这个key里面的成员 ,使用如下:

172.16.12.3:6379> sismember k1 v3
(integer) 0
172.16.12.3:6379> sismember k1 v2
(integer) 1

v3是不在k1这个集合中的, 所以返回0 , v2存在,就返回1

scard

scard 命令可以返回指定集合中的元素的数量,如下:

172.16.12.3:6379> scard k1
(integer) 1
172.16.12.3:6379> sadd k1 v1
(integer) 1
172.16.12.3:6379> scard k1
(integer) 2

可以看到,最开始元素的数量是1,然后添加一个元素进去,再查一下就是2了.

smember

smember命令,可以返回指定key集合中的所有元素,如下:

172.16.12.3:6379> sadd k1 v3 v4 v5 v6
(integer) 4
172.16.12.3:6379> smembers k1
1) "v4"
2) "v1"
3) "v3"
4) "v5"
5) "v6"
6) "v2"

srandmember

srandmember命令,传入key的名称,然后会随机返回key集合中的一个元素,从redis2.6开始,这个命令可以指定返回元素的个数(count)

count参数详解:

如下:

172.16.12.3:6379> srandmember k1
"v2"
172.16.12.3:6379> srandmember k1 2
1) "v5"
2) "v4"
172.16.12.3:6379> srandmember k1 9
1) "v2"
2) "v6"
3) "v4"
4) "v5"
5) "v3"
6) "v1"
172.16.12.3:6379> srandmember k1 -1
1) "v6"
172.16.12.3:6379> srandmember k1 -9
1) "v3"
2) "v1"
3) "v5"
4) "v4"
5) "v1"
6) "v4"
7) "v4"
8) "v2"
9) "v3"

spop

spop命令和srandmember类似,不同的是 spop每次返回的元素都会被从这个集合中移除掉,如下:

172.16.12.3:6379> spop k1
"v3"
172.16.12.3:6379> SMEMBERS k1
1) "v5"
2) "v6"
3) "v2"
4) "v4"
5) "v1"

sdiff

sdiff用来取两个集合的差集,如下:

172.16.12.3:6379> smembers k1
1) "v5"
2) "v6"
3) "v2"
4) "v4"
5) "v1"
172.16.12.3:6379> smembers k2
1) "v7"
2) "v2"
3) "v3"
172.16.12.3:6379> sdiff k1 k2
1) "v5"
2) "v6"
3) "v1"
4) "v4"

sdiffstore

sdiffstore和sdiff命令基本一致,不同的是会把返回的结果保存在一个新的集合中,使用如下:

172.16.12.3:6379> sdiff k1 k2
1) "v5"
2) "v6"
3) "v1"
4) "v4"
172.16.12.3:6379> sdiffstore k3 k1 k2
(integer) 4
172.16.12.3:6379> smembers k3
1) "v5"
2) "v6"
3) "v1"
4) "v4"

sinter

sinter命令,用来计算指定集合的交集,如下:

172.16.12.3:6379> smembers k1
1) "v5"
2) "v6"
3) "v2"
4) "v4"
5) "v1"
172.16.12.3:6379> smembers k2
1) "v7"
2) "v2"
3) "v3"
172.16.12.3:6379> sinter k1 k2
1) "v2"

sinterstore

sinterstore命令,和上面的sinter类似,但是会把返回值保存到一个新的集合中,如下:

172.16.12.3:6379> sinterstore k4 k1 k2
(integer) 1
172.16.12.3:6379> smembers k4
1) "v2"

sunion

用来计算集合的并集,如下:

172.16.12.3:6379> sunion k1 k2
1) "v5"
2) "v6"
3) "v2"
4) "v4"
5) "v3"
6) "v7"
7) "v1"

sunionstore

sunionstore和sunion类似,但是会把返回结果保存在一个新的集合中,如下:

172.16.12.3:6379> sunionstore k5 k1 k2
(integer) 7
172.16.12.3:6379> smembers k5
1) "v5"
2) "v6"
3) "v2"
4) "v4"
5) "v3"
6) "v7"
7) "v1"

关于list和set的一些常用命令就说这么多,主要就是一些添加,删除,交集并集差集的操作

上一篇下一篇

猜你喜欢

热点阅读