介绍
redis中的list类型与java中的LinkedList类似,可以看做是一个双向链表结构.既可以支持正向检索也可以支持反向检索
特征也与LinkedList类似:
- 有序
- 元素可以重复
- 插入和删除快(所有的链表都快)
- 查询速度一般
常用命令
LPUSH users a b c
: 向列表!!#0000ff 左侧!!插入1个或多个元素
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JvBXc9Pd-1681144188325)(null)]
RPUSH users e f g
: 向列表!!#0000ff 右侧!!插入1个或多个元素
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zgOJXnUR-1681144189327)(null)]
LPOP users
: 移除并返回列表!!#ff0000 左侧!!的第1个元素,没有则返回nil
192.168.2.14:26003> LPOP users
"c"
RPOP users
: 移除并返回列表!!#ff0000 右侧!!的第1个元素,没有则返回nil
192.168.2.14:26003> RPOP users
"g"
LRANGE users 0 2
: 返回1段索引范围内的所有元素,包含索引的开始和结束
192.168.2.14:26003> LRANGE users 0 2
1) "b"
2) "a"
3) "e"
BLPOP users 10
: 与LPOP类似,这里加了个10秒,如果users里没有元素会等待10秒,在等待的这10秒内新增了元素,会把元素返回且移除,如果10后任然没有元素则返回nil,可以开2个终端测试,1个等待,1个添加元素
192.168.2.14:26003> BLPOP users 10
(nil)
(10.04s)
BRPOP users 100
: 与BLPOP同理
思考
- 如何利用List结构模拟一个栈
- 入口和出口是同一边
- LPUSH和LPOP结合,RPUSH和RPOP结合
- 如何利用List结构模拟一个队列
- 入口和出口在两头
- LPUSH和RPOP结合,RPUSH和LPOP结合
- 如何利用List结构模拟一阻塞队列
- 入口和出口在两头
- LPUSH和BRPOP结合,RPUSH和BLPOP