在上文中介绍了Hash类型的数据相关的命令,本文介绍下List列表相关的命令
列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
LPush
LPush将所有指定的值插入到存于 key 的列表的头部。如果 key 不存在,那么在进行 push 操作前会创建一个空列表。 如果 key 对应的值不是一个 list 的话,那么会返回一个错误。
127.0.0.1:6379> lpush games lol dnf cs cf (integer) 4 127.0.0.1:6379> lpush user2 a b c (error) WRONGTYPE Operation against a key holding the wrong kind of value
返回结果是插入的数据的个数。
LRange
从列表中获取指定的元素。start 和 end 偏移量都是基于0的下标,即list的第一个元素下标是0(list的表头),第二个元素下标是1,以此类推。
偏移量也可以是负数,表示偏移量是从list尾部开始计数。 例如,-1 表示列表的最后一个元素,-2 是倒数第二个,以此类推。
127.0.0.1:6379> lrange games 0 -1 1) "cf" 2) "cs" 3) "dnf" 4) "lol" 127.0.0.1:6379> lrange games 0 3 1) "cf" 2) "cs" 3) "dnf" 4) "lol" 127.0.0.1:6379> lrange games 0 1 1) "cf" 2) "cs"
RPush
功能和LPush一致,只是从列表的右侧(尾部)添加。
127.0.0.1:6379> lpush games a1 a2 (integer) 6 127.0.0.1:6379> rpush games b1 b2 (integer) 8 127.0.0.1:6379> lrange games 0 -1 1) "a2" 2) "a1" 3) "cf" 4) "cs" 5) "dnf" 6) "lol" 7) "b1" 8) "b2"
llen
获取列表的长度
127.0.0.1:6379> llen games (integer) 3
lset
通过下标设置列表的值
127.0.0.1:6379> lset games 1 aaa OK 127.0.0.1:6379> lrange games 0 -1 1) "a1" 2) "aaa" 3) "a3"
RPop
移除列表尾部的元素并返回
127.0.0.1:6379> rpop games "b2" # 获取到了最后一个 127.0.0.1:6379> lrange games 0 -1 1) "a2" 2) "a1" 3) "cf" 4) "cs" 5) "dnf" 6) "lol" 7) "b1" # b2被移除了
LPop
和RPop类似,只是移除的是头部的元素
127.0.0.1:6379> lpop games "a2" # 移除了头部是a2并返回了 127.0.0.1:6379> lrange games 0 -1 1) "a1" # a2被移除了 2) "cf" 3) "cs" 4) "dnf" 5) "lol" 6) "b1"
LIndex
Lindex命令返回key中对应的index的下标的值。0表示第一个,-1表示最后一个
127.0.0.1:6379> lindex games 0 "a1" #第一个 127.0.0.1:6379> lindex games -1 "b1" # 最后一个 127.0.0.1:6379> lindex games 3 "dnf" # 第四个
LTrim
LTrim截取列表中的部分元素。0第一个,-1最后一个
127.0.0.1:6379> lrange games 0 -1 1) "a1" 2) "cf" 3) "cs" 4) "dnf" 5) "lol" 6) "b1" 127.0.0.1:6379> ltrim games 0 3 OK 127.0.0.1:6379> lrange games 0 -1 1) "a1" 2) "cf" 3) "cs" 4) "dnf"
BLPop
BLPOP 是阻塞式列表的弹出原语。 它是命令 LPOP 的阻塞版本,这是因为当给定列表内没有任何元素可供弹出的时候, 连接将被 BLPOP 命令阻塞。 当给定多个 key 参数时,按参数 key 的先后顺序依次检查各个列表,弹出第一个非空列表的头元素。同时在使用此命令的时候也需要指定过期时间,单位是秒。返回的接口是key和列表元素值
127.0.0.1:6379> blpop games 20 1) "games" 2) "cf" 127.0.0.1:6379> blpop games 20 1) "games" 2) "cs" 127.0.0.1:6379> blpop games 20 1) "games" 2) "dnf" 127.0.0.1:6379> blpop games 20 (nil) # 列表为空了,所以阻塞了20秒 (20.01s) 127.0.0.1:6379>
BRPop
命令和BLPop类似,RPop的阻塞版,阻塞的是返回尾部不为空的元素
127.0.0.1:6379> lrange games 0 -1 1) "cs" 2) "dnf" 3) "lol" 127.0.0.1:6379> brpop games 5 1) "games" 2) "lol" 127.0.0.1:6379> brpop games 5 1) "games" 2) "dnf" 127.0.0.1:6379> brpop games 5 1) "games" 2) "cs" 127.0.0.1:6379> brpop games 5 (nil) (5.04s)
RPopLPush
原子性地返回并移除存储在 source 的列表的最后一个元素(列表尾部元素), 并把该元素放入存储在 destination 的列表的第一个元素位置(列表头部)
127.0.0.1:6379> rpush games a1 a2 a3 (integer) 3 127.0.0.1:6379> lrange games 0 -1 1) "a1" 2) "a2" 3) "a3" 127.0.0.1:6379> rpoplpush games mygame "a3" 127.0.0.1:6379> lrange games 0 -1 1) "a1" 2) "a2" 127.0.0.1:6379> lrange mygame 0 -1 1) "a3" 127.0.0.1:6379> rpoplpush games mygame "a2" 127.0.0.1:6379> rpoplpush games mygame "a1" 127.0.0.1:6379> rpoplpush games mygame (nil) 127.0.0.1:6379> lrange games 0 -1 (empty list or set) 127.0.0.1:6379> lrange mygame 0 -1 1) "a1" 2) "a2" 3) "a3"
BRPopLPush
BRPOPLPUSH是RPOPLPUSH的阻塞版,如果没有移除的数据就会阻塞到有数据或者timeout。
127.0.0.1:6379> brpoplpush mygame games 5 "a3" 127.0.0.1:6379> brpoplpush mygame games 5 "a2" 127.0.0.1:6379> brpoplpush mygame games 5 "a1" 127.0.0.1:6379> brpoplpush mygame games 5 (nil) #阻塞到了timeout (5.03s)
~好了本文到此为止