美文网首页
Redis-5-列表与集合的一些常用命令

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

作者: 冷风_f818 | 来源:发表于2019-04-28 18:14 被阅读0次

    前文中,介绍了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参数详解:

    • 如果是整数且小于元素的个数,就会返回count个随机元素
    • 如果count是整数且大于集合中元素的个数时,则返回集合中的所有元素
    • 当count是负数,则会返回一个包含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的一些常用命令就说这么多,主要就是一些添加,删除,交集并集差集的操作

    相关文章

      网友评论

          本文标题:Redis-5-列表与集合的一些常用命令

          本文链接:https://www.haomeiwen.com/subject/cmmjnqtx.html