- 启动个后台运行的Redis容器
docker run --name some-redis -d redis
2. 进入这个容器的bash
docker exec -it some-redis /bin/bash
3. 进入redis-cli并查看版本
root@879a9d554188:/data# redis-cli
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> info
# Server
redis_version:6.2.6
...
4. 向L1插入一些数据
127.0.0.1:6379> RPUSH L1 1 2 3 4 5 6 7 8 9
(integer) 9
5. L1 头部的2元素依次推入L2的尾部,并观察变化后的列表内容
127.0.0.1:6379> LMOVE L1 L2 LEFT RIGHT
"1"
127.0.0.1:6379> LMOVE L1 L2 LEFT RIGHT
"2"
127.0.0.1:6379> LRANGE L1 0 -1
1) "3"
2) "4"
3) "5"
4) "6"
5) "7"
6) "8"
7) "9"
127.0.0.1:6379> LRANGE L2 0 -1
1) "1"
2) "2"
127.0.0.1:6379>
6. 清空列表的数据,并使用 BLMOVE 监听新的数据:
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"1"
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"2"
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"3"
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"4"
127.0.0.1:6379>
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"5"
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"6"
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"7"
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"8"
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"9"
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
^[[A^C
root@879a9d554188:/data# redis-cli
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
7. 启动另一个命令行,并推入一条数据
PS D:\Desktop> docker exec -it some-redis /bin/bash
root@879a9d554188:/data#
root@879a9d554188:/data#
root@879a9d554188:/data# redis-cli
127.0.0.1:6379> RPUSH L1 test1
(integer) 1
127.0.0.1:6379>
8. BLMOVE 获取到新的数据
127.0.0.1:6379> BLMOVE L1 L2 LEFT RIGHT 666
"test1"
(32.57s)
127.0.0.1:6379>
9. 假设“test1”已经被正确处理了,使用 LREM 从L2删除已经处理了的数据,可以看到”test1″,已经消失了
127.0.0.1:6379> LREM L2 1 test1
(integer) 1
127.0.0.1:6379> LRANGE L2 0 -1
1) "1"
2) "2"
3) "3"
4) "4"
5) "5"
6) "6"
7) "7"
8) "8"
9) "9"
10) "test2"
127.0.0.1:6379>
小结:
使用 BLMOVE 监听列表,使用 LREM 删除已经成功消费了的数据!看起来挺简单的!
BLMOVE 命令格式:
BLMOVE source destination LEFT|RIGHT LEFT|RIGHT timeout
Available since 6.2.0.
Time complexity: O(1)
Pingback引用通告: 介绍Redis数据类型和抽象 | 杨龙