List类型的操作(链表)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 232 – 1 个元素 (4294967295, 每个列表超过40亿个元素)。
1.1把值插入到链表头部
语法:lpush key value
1.2 把值插入到链表尾部
rpush key value
注意 :可以一次性插入多个元素如下:
lpush key value1 value2 value3 ....
1.3返回并删除链表的头部元素
lpop key
1.4返回并删除链表尾部元素
rpop key
1.5 返回链表中[start,stop]中的元素
规律:左数从0开始,右数从-1开始
lrange key start stop
如返回所有的链表元素用法如下:
lrange key 0 -1
1.6 从链表中删除 value值
lrem key count value
注意:删除count的绝对值个value后结束。
count>0 从表头中删除。
count<0 从表尾中删除。
如下用法:
lpush demo a b c d a d e a #创建一个链表
lrem demo 1 a # 在链表demo中从头部开始删除一个a值。最后变为 bcadea
lrem demo -2 a # 在链表demo中从尾部开始删除二个a值。最后变为 bcde
1.7统计链表中的元素个数
llen key
如下:
lpush demo a b c d # 创建一个demo链表
llen demo # 查询该链表中的元素的个数。
1.8 返回链表上index索引上的值
lindex key index
规律:index>=0,从头部开始。
index<=-1,从尾部开始。
1.9-linsert key after|before search value
作用:在key链表中寻找search,并在search值之前|之后,插入value。
注意:
一旦找到一个search后,命令就结束了,因此不会插入多个value。
before用法
lpush num 1 3 6 7 //创建一个num链表
linsert num before 3 2 // 在该链表的3前插入2
lrange num 0 -1 //查询该链表的元素
after用法
lpush num 1 3 6 7 //创建一个num链表
linsert num after 3 4 // 在该链表的3后插入4
lrange num 0 -1 //查询该链表的元素
2.0- rpoplpush source dest
作用:把source链表的尾部拿出,放在dest链表的头部。并返回该值。
lpush demo a b c d
rpoplpush demo demo1 //把链表demo的尾部d拿出来放在链表demo1的头部中
这种做法有什么用呢?
试想一下,未交费的用户我们把它存在demo中,交了费了就放在demo1中。
场景
task + bak双链表完成完全队列
业务逻辑
- rpoplpush task bak
- 接收返回值,并做业务处理。
- 如果成功,rpop bak清除业务,如不成功,下次从bak表时取任务。
2.1-brpop,blpop key timeout
作用:等待弹出key的尾部元素。
timeout为等待超时时间,如果timeout为0则一直等待。
场景:长轮询ajax在线聊天时,能够用到。