Redis 五大数据类型 - List类型

列表类型简介
列表(list)用于存储多个有序的字符串。列表是一种比较灵活的数据结构,可以充当栈和队列的角色,在实际开发上有很多应用场景

列表的特点:
列表中的元素是有序的,可以通过索引下标来获取某个元素或者某个范围内的元素列表
列表中的元素是可以重复的

操作命令
1、LPUSH key value [value …] : 先进后出,在列表头部插入元素

127.0.0.1:6379> LPUSH k1 1 2 3 4 5
(integer) 5   

2、LRANGE key start stop : 出栈,根据索引,获取列表元素

 127.0.0.1:6379> LRANGE k1 0 -1
	1) "5"
	2) "4"
	3) "3"
	4) "2"
	5) "1"

3、RPUSH key value [value …] :先进先出,在列表的尾部插入元素

127.0.0.1:6379> RPUSH k1 0 -1 -2 
(integer) 9
127.0.0.1:6379> LRANGE k1 0 -1
1) "6"
2) "5"
3) "4"
4) "3"
5) "2"
6) "1"
7) "0"
8) "-1"
9) "-2"

4、LPUSHX key value:将一个值插入到已存在的列表头部

	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "5"
	3) "4"
	4) "3"
	5) "2"
	6) "1"
	7) "0"
	8) "-1"
	9) "-2"
	127.0.0.1:6379> LPUSHX k1 xxx
	(integer) 14
	127.0.0.1:6379> LRANGE k1 0 -1
	 1) "xxx"
	 2) "6"
	 3) "5"
	 4) "4"
	 5) "3"
	 6) "2"
	 7) "1"
	 8) "0"
	 9) "3"
	10) "2"
	11) "1"
	12) "0"
	13) "-1"
	14) "-2"

5、LPOP key : 左边出栈,获取列表的第一个元素 (会删除元素)

	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "5"
	3) "4"
	4) "3"
	5) "2"
	6) "1"
	7) "0"
	8) "-1"
	9) "-2"
	127.0.0.1:6379> LPOP  k1
	"6"
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "5"
	2) "4"
	3) "3"
	4) "2"
	5) "1"
	6) "0"
	7) "-1"
	8) "-2"

6、RPOP key: 右边出栈,获取列表的最后一个元素 (会删除元素)

	127.0.0.1:6379> LRANGE k1 0 -1
	1) "5"
	2) "4"
	3) "3"
	4) "2"
	5) "1"
	6) "0"
	7) "-1"
	8) "-2"
	127.0.0.1:6379> RPOP  k1
	"-2"
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "5"
	2) "4"
	3) "3"
	4) "2"
	5) "1"
	6) "0"
	7) "-1"

7、lrem key count value (count数量) : 根据key,删除n个value

	127.0.0.1:6379> LPUSH k1  1 2 3 4 5 2 7 2 8
	(integer) 9
	127.0.0.1:6379> LREM k1 2 2
	(integer) 2
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "8"
	2) "7"
	3) "5"
	4) "4"
	5) "3"
	6) "2"
	7) "1"

8、lindex key index :根据索引,取出元素

	127.0.0.1:6379> LRANGE k1 0 -1
	1) "8"
	2) "7"
	3) "5"
	4) "4"
	5) "3"
	6) "2"
	7) "1"
	127.0.0.1:6379> LINDEX k1 2
	"5"

9、llen key : 链表长度,元素个数

	127.0.0.1:6379> LRANGE k1 0 -1
	1) "8"
	2) "7"
	3) "5"
	4) "4"
	5) "3"
	6) "2"
	7) "1"
	127.0.0.1:6379> LLEN k1
	(integer) 7

10、ltrim key start stop :保留指定索引区间的元素 (start起始索引 stop结束索引)

	127.0.0.1:6379> LPUSH k1 1 2 3 4 5 6 
	(integer) 6
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "5"
	3) "4"
	4) "3"
	5) "2"
	6) "1"
	127.0.0.1:6379> LTRIM k1  0  4
	OK
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "5"
	3) "4"
	4) "3"

11、lset key index value:通过索引设置列表元素的值

	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "5"
	127.0.0.1:6379> lset k1 1 2
	OK
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "2"

12、linsert key before|after pivot value:在列表的元素前或者后插入元素 (pivot定位查找的值,注意不是下标, value 添加的值)

	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "5"
	3) "4"
	4) "3"
	5) "2"
	6) "1"
	127.0.0.1:6379> LINSERT k1 before 2 A
	(integer) 7
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "5"
	3) "4"
	4) "3"
	5) "A"
	6) "2"
	7) "1"
	127.0.0.1:6379> LINSERT k1 after 6 B
	(integer) 8
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "B"
	3) "5"
	4) "4"
	5) "3"
	6) "A"
	7) "2"
	8) "1"

13、阻塞单播队列 FIFO
BLPOP key [key…] timeout:左边弹出值,(key可以是多个,如果没有值,会一直等到有值,直到过期)
BRPOP key [key…] timeout:右边弹出值

   127.0.0.1:6379> BLPOP k1  0      开启阻塞	

打开另一个窗口进行添加元素

	127.0.0.1:6379> LPUSH k1 A   
	(integer) 1

回到原窗口

	127.0.0.1:6379> BLPOP k1  0   
	1) "k1"
	2) "A"
	(4.43s)

BRPOP 同理

14、BRPOPLPUSH source destination:移除列表的最后一个元素,并将该元素添加到另一个列表并返回 (源list的key值 目的list的key值)

	127.0.0.1:6379> LPUSH k1 1 2 3 4 5 6 7 8 9
	(integer) 9
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "9"
	2) "8"
	3) "7"
	4) "6"
	5) "5"
	6) "4"
	7) "3"
	8) "2"
	9) "1"
	127.0.0.1:6379> RPOPLPUSH k1 k2
	"1"
	127.0.0.1:6379> LRANGE k2 0 -1
	1) "1"
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "9"
	2) "8"
	3) "7"
	4) "6"
	5) "5"
	6) "4"
	7) "3"
	8) "2"

15、BRPOPLPUSH source destination timeout:从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

	127.0.0.1:6379> LPUSH k1 1 2 3 4 5 6
	(integer) 6
	127.0.0.1:6379> BRPOPLPUSH k1 k2 2
	"1"
	127.0.0.1:6379> BRPOPLPUSH k1 k2 2
	"2"
	127.0.0.1:6379> BRPOPLPUSH k1 k2 2
	"3"
	127.0.0.1:6379> BRPOPLPUSH k1 k2 2
	"4"
	127.0.0.1:6379> LRANGE k1 0 -1
	1) "6"
	2) "5"
	127.0.0.1:6379> LRANGE k2 0 -1
	1) "4"
	2) "3"
	3) "2"
	4) "1"
使用场景

列表类型可以用于比如:

消息队列,Redis 的 lpush+brpop命令组合即可实现阻塞队列,生产者客户端使用lrpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的“抢”列表尾部的元素,多个客户端保证了消费的负载均衡和高可用性。

文章列表

每个用户有属于自己的文章列表,现需要分页展示文章列表。此时可以考虑使用列表,因为列表不但是有序的,同时支持按照索引范围获取元素。

实现其他数据结构

lpush+lpop =Stack(栈)

lpush +rpop =Queue(队列)

lpsh+ ltrim =Capped Collection(有限集合)

lpush+brpop=Message Queue(消息队列)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值