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,在线聊天时,能够用到