Redis(五):List集合数据类型详解

2022-12-01 08:44:01 浏览数 (1)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)

一个列表最多可以包含 232 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。

实例:

代码语言:javascript复制
redis 127.0.0.1:6379> LPUSH runoobkey redis
(integer) 1
redis 127.0.0.1:6379> LPUSH runoobkey mongodb
(integer) 2
redis 127.0.0.1:6379> LPUSH runoobkey mysql
(integer) 3
redis 127.0.0.1:6379> LRANGE runoobkey 0 10

1) "mysql"
2) "mongodb"
3) "redis"

在Redis中我们可以使List成为,栈、队列、阻塞队列!

1、List常用命令

1.1、LPUSH、LRANGE、RPUSH

代码语言:javascript复制
127.0.0.1:6379> LPUSH list v1	//将一个或者多个的值插入到列表头部(左)
(integer) 1
127.0.0.1:6379> LPUSH list v2
(integer) 2
127.0.0.1:6379> LPUSH list v3
(integer) 3
127.0.0.1:6379> RPUSH list v4r  //将一个或者多个的值插入到列表尾部(右)
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1  //通过区间获取list的值
1) "v3"
2) "v2"
3) "v1"
4) "v4r"//可以看出这个顺序是:v3 v2 v1 v4r
127.0.0.1:6379> 

1.2、LPOP、RPOP

代码语言:javascript复制
127.0.0.1:6379> LPOP list	//移除list第一个元素(左)
"v3"
127.0.0.1:6379> rPOP list	//移除list最后一个元素(右)
"v4r"
127.0.0.1:6379> LRANGE list 0 -1
1) "v2"
2) "v1"
127.0.0.1:6379> 

1.3、Lindex

代码语言:javascript复制
127.0.0.1:6379> LINDEX list 0	//通过下标获得list的某一个值
"v2"
127.0.0.1:6379> LINDEX list 1
"v1"

1.4、Llen

代码语言:javascript复制
127.0.0.1:6379> LLEN list	//获取list长度
(integer) 2

1.5、LREM

代码语言:javascript复制
127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v4"
3) "v3"
4) "v2"
5) "v1"
127.0.0.1:6379> LREM list 2 v4	//移除list中指定个数(2)的值(v4)
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "v3"
2) "v2"
3) "v1"
127.0.0.1:6379> 

1.6、trim

代码语言:javascript复制
127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> LTRIM list 1 2	//将list在指定位置截取
OK
127.0.0.1:6379> LRANGE list 0 -1
1) "v3"
2) "v2"
127.0.0.1:6379> 

1.7、组合命令rpoplpush

代码语言:javascript复制
127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "v2"
4) "v1"
127.0.0.1:6379> rpoplpush list list2	//移除列表中最后一个元素到新的列表中
"v1"
127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "v2"
127.0.0.1:6379> LRANGE list2 0 -1
1) "v1"
127.0.0.1:6379> 

1.8、lset

代码语言:javascript复制
127.0.0.1:6379> EXISTS list2	//查询列表是否存在
(integer) 1
127.0.0.1:6379> LRANGE list2 0 -1
1) "v1"
127.0.0.1:6379> LSET list2 0 vv	//替换列表指定位置的值,如过不存在会报错
OK
127.0.0.1:6379> LRANGE list2 0 -1
1) "vv"
127.0.0.1:6379> 

1.9、linset

代码语言:javascript复制
127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "v2"
127.0.0.1:6379> LINSERT list before v2 vv	//将某个值插入列表指定值的前面
(integer) 4
127.0.0.1:6379> LINSERT list after v2 vv2	//将某个值插入列表指定值的后面
(integer) 5
127.0.0.1:6379> LRANGE list 0 -1
1) "v4"
2) "v3"
3) "vv"
4) "v2"
5) "vv2"
127.0.0.1:6379> 

2、小结

  • List可以被想象为一个链表,可以befor node after ,left,right进行插入;
  • 如果key不存在,创建新链表,如果存在,新增内容;
  • 如果移除了所有值,则代表不存在;
  • 在两边插入或改动,效率最高,中间元素效率偏低;

0 人点赞