文章目录
Redis基本类型之List类型
一、概述
1、简介
- Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索
- push:添加
- pop:删除
2、特征
- 有序
- 元素可以重复
- 插入和删除快
- 查询速度一般
常用来存储一个有序数据,例如:朋友圈点赞列表,评论列表等。
二、List类型的常用命令
命令 | 作用 |
---|---|
lpush | 向列表左侧插入一个或多个元素 |
lpop | 移除并返回列表左侧的第一个元素,没有则返回null |
rpush | 向列表右侧插入一个或多个元素 |
rpop | 移除并返回列表右侧的第一个元素 |
lrange | 返回一段角标范围内的所有元素 |
blpop | 与 lpop 类似,只不过在没有元素时等待指定时间,而不是直接返回nil |
brpop | 与 rpop 类似,只不过在没有元素时等待指定时间,而不是直接返回nil |
三、操作案例
1、lpush(左侧插入一个或多个)
- lpush:向列表左侧插入一个或多个元素
192.168.8.137:6379> LPUSH users 1 2
(integer) 2
2、lpop(左侧移除)
- lpop:移除并返回列表左侧的第一个元素,没有则返回null
# 会把2移除
192.168.8.137:6379> LPOP users 1
1) "2"
3、rpush(右侧插入一个或多个)
- rpush:向列表右侧插入一个或多个元素
192.168.8.137:6379> RPUSH users 4 5 6
(integer) 5
4、rpop(右侧移除)
- rpop:移除并返回列表右侧的第一个元素
192.168.246.128:6379> RPOP users 1
1) "6"
5、lrange(获取角标元素)
- lrange:返回一段角标范围内的所有元素
192.168.246.128:6379> LRANGE users 1 2
1) "4"
2) "5"
6、blpop (左侧移除)
- blpop:与 lpop 类似,只不过在没有元素时等待指定时间,而不是直接返回nil
192.168.246.128:6379> BLPOP users 1
1) "users"
2) "1"
7、brpop(右侧移除)
- brpop:与 rpop 类似,只不过在没有元素时等待指定时间,而不是直接返回nil
192.168.246.128:6379> BRPOP users 2
1) "users"
2) "5"
8、lpush 与 blpop 阻塞式获取
- 多开一个命令窗口,阻塞式获取
192.168.8.137:6379> LPUSH users2 jack
(integer) 1
192.168.8.137:6379> BLPOP users2 2
1) "users2"
2) "jack"
四、问题
1、如何利用List结构模拟一个栈?
- 入口和出口在同一边
2、如何利用List结构模拟一个队列?
- 入口和出口在不同边
3、如何利用List模拟一个阻塞队列?
- 入口和出口在不同边
- 出队时采用BLPOP或BRPOP