Redis之list
Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)
一个列表最多可以包含 2^32 - 1 个元素 (4294967295, 每个列表超过40亿个元素)。
list可以定义一些规则,使它作为栈、队列或双端队列。
案例
- LPUSH&RPUSH
127.0.0.1:6379> LPUSH list noe #将一个值或多个值插入列表头部,最左边
(integer) 1
127.0.0.1:6379> LPUSH list two
(integer) 2
127.0.0.1:6379> LPUSH list tree
(integer) 3
127.0.0.1:6379> LRANGE list 0 -1 #获取list中的值
1) "tree"
2) "two"
3) "noe"
127.0.0.1:6379> RPUSH list right #将一个值或多个值插入列表尾部,最右边
(integer) 4
127.0.0.1:6379> LRANGE list 0 -1
1) "tree"
2) "two"
3) "noe"
4) "right"
127.0.0.1:6379> LRANGE list 0 1 #获取list区间中的值
1) "tree"
2) "two"
- LPOP&RPOP
127.0.0.1:6379> LRANGE list 0 -1
1) "tree"
2) "two"
3) "noe"
4) "right"
127.0.0.1:6379> LPOP list #移除列表中的第一个元素,最左边的
"tree"
127.0.0.1:6379> RPOP list #移除列表中的最后一个元素,最右边的
"right"
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "noe"
- LINDEX
127.0.0.1:6379> LINDEX list 1 #通过下标获取list中的某一个值
"noe"
127.0.0.1:6379> LINDEX list 0
"two"
- LLEN
127.0.0.1:6379> LLEN list #获取list的长度
(integer) 2
- LREM
count > 0: 从头到尾删除值为 value 的元素。
count < 0: 从尾到头删除值为 value 的元素。
count = 0: 移除所有值为 value 的元素。
比如, LREM list -2 “hello” 会从列表key中删除最后两个出现的 “hello”。
需要注意的是,不存在key会被当作空list处理,所以当 key 不存在的时候,这个命令会返回 0。
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "noe"
3) "right"
4) "hello"
5) "hello"
127.0.0.1:6379> LREM list 1 right #移除list中指定的值right(从左到右)
(integer) 1
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "noe"
3) "hello"
4) "hello"
127.0.0.1:6379> LREM list 2 hello
(integer) 2
127.0.0.1:6379> LRANGE list 0 -1
1) "two"
2) "noe"
- LTRIM
127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist hello1
(integer) 2
127.0.0.1:6379> rpush mylist hello2
(integer) 3
127.0.0.1:6379> rpush mylist hello3
(integer) 4
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> LTRIM mylist 1 2 #通过下表截取指定长度,这个list只剩下截取的元素(从第一个截取两个元素)
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "hello1"
2) "hello2"
127.0.0.1:6379>
- rpoplpush
移除列表中的最后一个元素并将它移动到新的列表中。
127.0.0.1:6379> rpush mylist hello
(integer) 1
127.0.0.1:6379> rpush mylist hello1
(integer) 2
127.0.0.1:6379> rpush mylist hello2
(integer) 3
127.0.0.1:6379> rpoplpush mylist myotherlist
"hello2"
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "hello1"
127.0.0.1:6379> LRANGE myotherlist 0 -1
1) "hello2"
- lset
将列表中指定的值替换成新的值,更新操作
127.0.0.1:6379> EXISTS list
(integer) 0
127.0.0.1:6379> lset list 0 item #如果列表不存在,报错
(error) ERR no such key
127.0.0.1:6379> lpush list value1
(integer) 1
127.0.0.1:6379> lrange list 0 0
1) "value1"
127.0.0.1:6379> lset list 0 item #如果列表存在,更新当前下表的值为新的值
OK
127.0.0.1:6379> lrange list 0 0
1) "item"
127.0.0.1:6379> lset list 1 other
(error) ERR index out of range
- linsert
将某一个具体的值,插入到列表中某个元素的前边或后边
127.0.0.1:6379> RPUSH mylist hello
(integer) 1
127.0.0.1:6379> RPUSH mylist world
(integer) 2
127.0.0.1:6379> LINSERT mylist before world orther
(integer) 3
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "orther"
3) "world"
127.0.0.1:6379> LINSERT mylist after world new
(integer) 4
127.0.0.1:6379> LRANGE mylist 0 -1
1) "hello"
2) "orther"
3) "world"
4) "new"
参考