Redis 基本数据类型-列表
列表类型
列表类型可以存储一个有序的字符串列表, 列表的内部是使用的双向链表(double linked list)实现的,所以向列表两端添加元素的时间复杂度是O(1), 但是链表通过索引访问元素比较慢。列表也可以作为队列使用,和散列表类型一样,一个列表类型的键可以最多容纳2^32-1个元素。
常用命令
- 向列表左端添加元素,返回值表示增加后列表的长度 lpush key value [value...]
- 向列表右端添加元素,返回值表示增加后列表的长度 rpush key value [value...]
127.0.0.1:6379> lpush numbers 1
(integer) 1
127.0.0.1:6379> lpush numbers 2 3
(integer) 3
127.0.0.1:6379> rpush numbers 0 -1
(integer) 5
- 从列表左端弹出一个元素 lpop key
- 从列表右端弹出一个元素 rpop key
127.0.0.1:6379> lpop numbers
"3"
127.0.0.1:6379> rpop numbers
"-1"
127.0.0.1:6379>
- 获取列表元素的个数 llen key
127.0.0.1:6379> llen numbers
(integer) 3
- 获取列表片段 lrange key start end
127.0.0.1:6379> lrange numbers 0 2
1) "2"
2) "1"
3) "0"
- 删除列表中指定元素的值, 返回值实际删除元素的个数。 lrem key count value
1、 count > 0 时 lrem会从列表左端开始删除前count个值为value的元素
2、 count = 0 时 lrem会删除所有值为value的元素
3、 count < 0 时 lrem会从列表右端删除前|count|个值为value的元素
127.0.0.1:6379> lrange numbers 0 2
1) "2"
2) "1"
3) "0"
- 获取指定索引的元素值 lindex key index
- 设置指定索引的元素值 lset key index value
127.0.0.1:6379> lindex numbers 0
"1"
127.0.0.1:6379> lindex numbers -1
"0"
127.0.0.1:6379> lset numbers 1 7
OK
127.0.0.1:6379> lindex numbers 1
"7"
- 只保留列表指定片段 ltrim key start end
127.0.0.1:6379> lrange numbers 0 -1
1) "1"
2) "2"
3) "7"
4) "3"
127.0.0.1:6379> ltrim numbers 1 2
OK
127.0.0.1:6379> lrange numbers 0 1
1) "2"
2) "7"
- 向列表中插入元素 linsert key before|after pivot value
linsert命令会在列表中从左到右查找值为pivot的元素,根据第二个参数before还是after将value值插入到该元素之前还是之后
127.0.0.1:6379> lrange numbers 0 -1
1) "2"
2) "7"
3) "0"
127.0.0.1:6379> lrange numbers 0 -1
1) "2"
2) "7"
3) "0"
127.0.0.1:6379> linsert numbers after 7 3
(integer) 4
127.0.0.1:6379> lrange numbers 0 -1
1) "2"
2) "7"
3) "3"
4) "0"
127.0.0.1:6379> linsert numbers before 2 1
(integer) 5
127.0.0.1:6379> lrange numbers 0 -1
1) "1"
2) "2"
3) "7"
4) "3"
5) "0"
- 将一个元素从一个列表转到另一个列表 rpoplpush source destination
rpoplpush 命令会先从source列表类型键的右边弹出一个元素,然后将其插入到destination列表类型键的左边,并返回这个元素值。整个过程是原子性的。当source和destination相同时,rpoplpush命令会不断的将队尾的元素插入到队首,借助这个特性,可以实现网站的检测监控系统:
127.0.0.1:6379> lrange numbers 0 -1
1) "0"
2) "1"
3) "2"
4) "7"
5) "3"