版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议
前言
继续学习操作 list 类型的命令,上一篇笔记学习了一个从列表左侧插入的命令 LPUSH ,今天可以学到类似的从右端插入,还可以学到从左右两端分别删除的命令,有了今天的这个补充,使用 Redis 的列表来实现队列或者栈简直易如反掌。
这篇笔记中的3个命令分别是 LPOP 、 RPUSH 、 RPOP ,可以参考:
- 《Redis每日一练(21):LPUSH和LRANGE命令》 中的 LPUSH 命令
LPOP
- 最早出现版本:1.0.0
- 时间复杂度:O(1)
- 命令参数:LPOP key
- 操作类型:lists
- 官方文档
作用
这个命令的作用就是从列表的左侧删除一个元素,每次都是从最左侧删除,返回删除的元素,这里的删除也可以叫做弹出,当列表内没有元素,或者指定的列表键不存在时,返回值为nil。
利用 LPUSH 命令每次都从左侧插入,然后利用 LPOP 命令每次都从左侧弹出,那么这样就实现了一个后进先出的逻辑栈。
练习
先依次插入几个元素,然后再依次弹出:
127.0.0.1:6379> LPUSH cachelist a b c
(integer) 3
127.0.0.1:6379> LPUSH cachelist test
(integer) 4
127.0.0.1:6379> LPOP cachelist
"test"
127.0.0.1:6379> LPOP cachelist
"c"
127.0.0.1:6379> LPOP cachelist
"b"
127.0.0.1:6379> LPOP cachelist
"a"
127.0.0.1:6379> LPOP cachelist
(nil)
127.0.0.1:6379> LPOP cache
(nil)
127.0.0.1:6379>
RPUSH
- 最早出现版本:1.0.0
- 时间复杂度:O(1)(对于每一个元素来说)
- 命令参数:RPUSH key element [element …]
- 操作类型:lists
- 官方文档
作用
这个命令与 LPUSH 相对,RPUSH 每次从列表的结尾插入,当2.4版本之后可以一次插入多个命令,命令的返回值是插入后列表中元素的个数。
如果将列表从左往右放置,那么 RPUSH 命令每次从列表的右侧插入,所以这个命令也可以用简单记作 right push,这也是我的记忆方法。
当指定的列表的键不存在时,会将这个键初始化为一个空列表然后进行插入操作,如果指定的键不是列表类型,那么 Redis 会给出报错信息。
练习
使用 RPUSH 命令创建列表并插入元素,然后使用 LRANGE 命令查看内容:
127.0.0.1:6379> RPUSH cache z x c
(integer) 3
127.0.0.1:6379> RPUSH 1 d 4
(integer) 2
127.0.0.1:6379> RPUSH cache 21 run test
(integer) 6
127.0.0.1:6379> LRANGE cache 0 -1
1) "z"
2) "x"
3) "c"
4) "21"
5) "run"
6) "test"
127.0.0.1:6379>
RPOP
- 最早出现版本:1.0.0
- 时间复杂度:O(1)
- 命令参数:RPOP key
- 操作类型:lists
- 官方文档
作用
这个命令与 LPOP 相对, RPOP 每次从列表的结尾处将元素弹出,也就是说每次弹出最右边、最后的元素,这个命令执行完会返回弹出的元素的值。
当列表为空或者指定的列表键不存在时会返回nil。
练习
使用 LPUSH 命令 和 RPOP 命令实现一个队列,队列的特点是先进先出:
127.0.0.1:6379> LPUSH queue 1
(integer) 1
127.0.0.1:6379> LPUSH queue 2
(integer) 2
127.0.0.1:6379> LPUSH queue 3
(integer) 3
127.0.0.1:6379> RPOP queue
"1"
127.0.0.1:6379> RPOP queue
"2"
127.0.0.1:6379> LPUSH queue 4
(integer) 2
127.0.0.1:6379> RPOP queue
"3"
127.0.0.1:6379> LPUSH queue 5
(integer) 2
127.0.0.1:6379> LRANGE queue 0 -1
1) "5"
2) "4"
127.0.0.1:6379> RPOP queue
"4"
127.0.0.1:6379>
总结
- LPOP 命令从列表头,也就是左侧弹出一个元素,如果列表为空或者指定的列表键不存在返回nil。
- RPUSH 命令可以在列表的最后插入元素,返回插入后列表的元素总数。
- RPOP 命令从列表的末尾弹出一个元素,如果列表为空或者指定的列表键不存在返回nil。
2019-12-9 19:44:22