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不存在,创建新链表,如果存在,新增内容;
- 如果移除了所有值,则代表不存在;
- 在两边插入或改动,效率最高,中间元素效率偏低;