redis的列表是双端的,是有序的。
双端的,意味着可以左边压入,右边弹出,这就是队列。左边压入,左边弹出,这就是栈。
LPUSH mylist "one"
当然可以同时压入多个元素
LPUSH mylist "one" "two" "three"
如果mylist不存在,会创建一个list
LPUSHX mylist "one"
RPUSH mylist "one"
当然可以同时压入多个元素
RPUSH mylist "one" "two" "three"
如果mylist不存在,会创建一个list
RPUSHX mylist "one"
LPOP mylist
-- 存在则返回值,否则返回nil
RPOP mylist
-- 存在则返回值,否则返回nil
RPOPLPUSH用来从list1的右侧弹出元素压入list2的左端
RPOPLPUSH list1 list2
list1 和 list2可以是同一个list
使用LLEN获取列表元素的个数
LLEN mylist
-- 3
使用LINDEX可以获取指定位置的元素,0~len-1, -len~-1
LINDEX mylist 0
-- 第一个元素
LINDEX mylist -1
-- 最后一个元素
使用LRANGE获取指定范围的元素,支持负索引
LRANGE key start end
例如,获取1-3个元素
LRANGE mylist 0 2
LSET可以设置指定位置的元素
LSET key index val
例如,对mylist的第一个元素,更新为book
LSET mylist 0 "book"
在two前面插入one,后面插入three
LINSERT mylist BEFORE "two" "one"
LINSERT mylist AFTER "two" "three"
如果只保留指定范围的元素,删除其他的元素,可以使用LTRIM
LTRIM key start end
例如保留前两个元素
LTRIM mylist 0 1
LREM key 0 val
例如删除所有的one
LREM mylist 0 "one"
从左边开始,删除最多2两个one
LREM mylist 2 "one"
从右边开始,删除最多3两个one
LREM mylist -3 "one"
BLPOP mylist 5
要么直接返回值,要么阻塞等待,直到可用或5s超时
BRPOP mylist 10
要么直接返回值,要么阻塞等待,直到可用或10s超时
作用与RPOPLPUSH类似,区别在于阻塞效果
BRPOPLPUSH mylist1 mylist2 10