Link链表结构
1、lpush key value
把值插入链头部,返回链表个数
127.0.0.1:6379> lpush a a
(integer) 1
127.0.0.1:6379> lpush a a
(integer) 2
2、rpush key value
把值插入链尾部,返回链表个数
127.0.0.1:6379> rpush a b
(integer) 3
3、lrange key start stop
返回链表中[strat,stop]中的元素
规律:左数从0开始,右数从-1开始
127.0.0.1:6379> lrange char 0 4
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
127.0.0.1:6379> lrange char 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "e"
4、lpop key
左边取出值
127.0.0.1:6379> lpop char
"a"
127.0.0.1:6379> lrange char 0 -1
1) "b"
2) "c"
3) "d"
4) "e"
5、rpop key
右边取出值
127.0.0.1:6379> lrange char 0 -1
1) "b"
2) "c"
3) "d"
4) "e"
127.0.0.1:6379> rpop char
"e"
127.0.0.1:6379> lrange char 0 -1
1) "b"
2) "c"
3) "d"
6、lrem key count value
从key链表中左边开始删除count个value
注意:删除count的绝对值个value后结束
count>0 从表头删除
count<0 从表尾删除
127.0.0.1:6379> rpush char a b c d f a c
(integer) 7
127.0.0.1:6379> lrem char 1 b
(integer) 1
127.0.0.1:6379> lrange char 0 -1
1) "a"
2) "c"
3) "d"
4) "f"
5) "a"
6) "c"
127.0.0.1:6379> rpush char a b c d f a c a l c s a b c b
(integer) 15
127.0.0.1:6379> lrange char 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "f"
6) "a"
7) "c"
8) "a"
9) "l"
10) "c"
11) "s"
12) "a"
13) "b"
14) "c"
15) "b"
127.0.0.1:6379> lrem char -2 b
(integer) 2
127.0.0.1:6379> lrange char 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "f"
6) "a"
7) "c"
8) "a"
9) "l"
10) "c"
11) "s"
12) "a"
13) "c"
7、ltrim key strat stop
剪切key对应的链表,切【start,stop】一段,并把该段从新复制给key
127.0.0.1:6379> lrange char 0 -1
1) "a"
2) "b"
3) "c"
4) "d"
5) "f"
6) "a"
7) "c"
8) "a"
9) "l"
10) "c"
11) "s"
12) "a"
13) "c"
127.0.0.1:6379> ltrim char 5 -1
OK
127.0.0.1:6379> lrange char 0 -1
1) "a"
2) "c"
3) "a"
4) "l"
5) "c"
6) "s"
7) "a"
8) "c"
8、lindex key index
返回index上的值
127.0.0.1:6379> lrange char 0 -1
1) "a"
2) "c"
3) "a"
4) "l"
5) "c"
6) "s"
7) "a"
8) "c"
127.0.0.1:6379> lindex char 3
"l"
8、llen key
计算链表的元素个数
127.0.0.1:6379> llen char
(integer) 8
9、linsert key after|before search value
在key链表中寻找search,并在search之前或之后,插入value
注意:一旦找到一个search后,命令旧结束,因此不能插入多个value
127.0.0.1:6379> lrange char 0 -1
1) "a"
2) "c"
3) "a"
4) "l"
5) "c"
6) "s"
7) "a"
8) "c"
127.0.0.1:6379> linsert char after a c
(integer) 9
127.0.0.1:6379> lrange char 0 -1
1) "a"
2) "c"
3) "c"
4) "a"
5) "l"
6) "c"
7) "s"
8) "a"
9) "c"
127.0.0.1:6379> linsert char before a c
(integer) 10
127.0.0.1:6379> lrange char 0 -1
1) "c"
2) "a"
3) "c"
4) "c"
5) "a"
6) "l"
7) "c"
8) "s"
9) "a"
10) "c"
10、rpoplpush source dest
把soure的尾部拿出来放到dest的头部,并返回该单元值
场景:task+bak双链表完成安全队列
task列表 bak列表
|
|
|
|
|
|
|
业务逻辑
1)rpoplpush task bak
2) 接收返回值并做业务处理
3)如果成功 rpop bak 清除任务,如果不成功,下次从bak表里取任务
127.0.0.1:6379> rpush task a b c d
(integer) 4
127.0.0.1:6379> rpoplpush task job
"d"
127.0.0.1:6379> lrange task 0 -1
1) "a"
2) "b"
3) "c"
127.0.0.1:6379> lrange job 0 -1
1) "d"
11、brpop,blpop key timeout
等待弹出key的尾、头元素,timeout为等待超时时间
如果timeout为0,则一直等待
返回值 第一个key,第二个value,第三个时间(立即返回没有)
长轮询Ajax,在线聊天是能够用到
127.0.0.1:6379> blpop job 0
1) "job"
2) "a"
127.0.0.1:6379> brpop job 0
1) "job"
2) "c"
(19.70s)
127.0.0.1:6379> brpop job 0
1) "job"
2) "c"
(6.11s)
127.0.0.1:6379> brpop job 0
1) "job"
2) "s"