redis03----link 链表操作

Posted 672530440

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了redis03----link 链表操作相关的知识,希望对你有一定的参考价值。

link 链表结构
之前是操作字符串string
链表:头元素,后面一个一个的指向后面的元素。Redis内部实现了链表的结构。链表的头尾,从一个元素找到另外的元素。   

链表的名字也是一个key。

flushdb:则数据全部没了。

lpush key value 
作用: 把值插入到链接头部
r1:0>lpush chars "a"
r1:0>rpush chars b
r1:0>rpush chars c
r1:0>lpush chars 0
r1:0>lpush ls p q r s t 
"21"
r1:0>lrange chars 1 2
1) "a"
2) "b"

r1:0>lrange chars 0 -1   //查看全部
1) "0"
2) "a"
3) "b"
4) "c"

r1:0>lpop chars
"a"
r1:0>rpop chars
"c"
rpop key
作用: 返回并删除链表尾元素,从右边删除。
rpush,lpop: 不解释
lrange key start  stop
作用: 返回链表中[start ,stop]中的元素
规律: 左数从0开始,右数从-1开始
lrem key count value
作用: 从key链表中删除 value值
注: 删除count的绝对值个value后结束
Count>0 从表头删除
Count<0 从表尾删除

r1:0>lrem ls 2 p    //删除值为p的并且只删除2个
"1"
ltrim key start stop
作用: 剪切key对应的链接,切[start,stop]一段,并把该段重新赋给key
r1:0>ltrim ls 1 3
"OK"
lindex key index
作用: 返回index索引上的值,
如  lindex key 2
llen key
作用:计算链接表的元素个数
redis 127.0.0.1:6379> llen task
(integer) 3
redis 127.0.0.1:6379> 
linsert  key after|before search value
作用: 在key链表中寻找’search’,并在search值之前|之后,.插入value
注: 一旦找到一个search后,命令就结束了,因此不会插入多个value

r1:0>linsert ls after g1 g2    //找到多个g1也只插入一次,不会插入多个,
"20"


rpoplpush source dest     //右边弹出左边塞入,一次拿出来一个,一个越来越少一个越来越多
作用: 把source的尾部拿出,放在dest的头部,
并返回 该单元值

场景: task + bak 双链表完成安全队列
Task列表                             bak列表
        
        


业务逻辑:
对task里面的人进行update操作,如果update失败还可以从bak里获取重新update,
1:Rpoplpush task bak
2:接收返回值,并做业务处理
3:如果成功,rpop bak 清除任务. 如不成功,下次从bak表里取任务


brpop ,blpop  key timeout
作用:等待弹出key的尾/头元素, 
如果为空了就不能够rpop和lpop了,这里可以一直等着,直到有内容就继续pop。
Timeout为等待超时时间
如果timeout为0,则一直等待

场景: 长轮询Ajax,在线聊天时,能够用到

 

以上是关于redis03----link 链表操作的主要内容,如果未能解决你的问题,请参考以下文章

Redis的列表(List)类型

php+redis队列链表操作类

redis之lists类型及操作

redis 数据结构

Redis 源码解析之通用双向链表(adlist)

系统学习redis之五——redis数据类型之list类型及操作