Redis学习笔记-05List列表
2020-12-27 本文已影响0人
惊天动地猪儿虫
List列表类型可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素或者获得列表的某一个片段。
其内部使用的是双向链表来实现的,向两端添加元素的时间复杂度为O(1)。
使用Java的代码实现的伪代码为:
Deque<String> articles = new LinkedList<String>();
articles.addLast("article2");
articles.addLast("article3");
articles.addFirst("article1");
使用Redis的实现为:
127.0.0.1:6379> rpush articles article2
(integer) 1
127.0.0.1:6379> rpush articles article3
(integer) 2
127.0.0.1:6379> lpush articles article1
(integer) 3
127.0.0.1:6379> lrange articles 0 2
1) "article1"
2) "article2"
3) "article3"
127.0.0.1:6379>
1 命令操作
API方法名 | 作用 |
---|---|
lpush | 在key对应list的头部添加字符串元素 |
rpush | 在key对应list的尾部添加字符串元素 |
linsert | 在key对应list特定位置前或后添加字符串 |
lset | 设置list中指定下标的元素值 |
lrem | 从key对应list中删除n个和value相同的元素(n<0 从尾删除,n=0 全部删除) |
ltrim | 保留指定key的值范围内的数据 |
lpop | 从list头部删除元素,并返回删除元素 |
rpop | 从list尾部删除元素,并返回删除元素 |
rpoplpush | 从第一个list的尾部移除元素并添加到底二个list的头部 |
lindex | 返回名称为key的list中index位置的元素 |
llen | 返回key对应list的长度 |
1.1 lpush和rpush
lpush key value [value...]
rpush key value [value...]
向列表两端增加元素
127.0.0.1:6379> rpush articles article2
(integer) 1
127.0.0.1:6379> rpush articles article3
(integer) 2
127.0.0.1:6379> lpush articles article1
(integer) 3
127.0.0.1:6379> lrange articles 0 2
1) "article1"
2) "article2"
3) "article3"
127.0.0.1:6379>
1.2 lpop和rpop
lpop key
rpop key
从列表两端弹出元素
127.0.0.1:6379> lpop articles
"article1"
127.0.0.1:6379> rpop articles
"article3"
127.0.0.1:6379> lrange articles 0 2
1) "article2"
127.0.0.1:6379>
1.3 llen
llen key
获取列表中元素的个数
127.0.0.1:6379> llen articles
(integer) 1
127.0.0.1:6379>
1.4 lrange
lrange key start stop
获取列表片段
127.0.0.1:6379> lrange articles 0 2
1) "article1"
2) "article2"
3) "article3"
127.0.0.1:6379>
lrange
命令也支持负索引,表示从右边开始计算序数
127.0.0.1:6379> lrange articles -2 -1
1) "article2"
2) "article3"
127.0.0.1:6379> lrange articles -3 -1
1) "article1"
2) "article2"
3) "article3"
127.0.0.1:6379>
1.5 lrem
lrem key count value
删除列表中前count个值为value的元素,返回值是实际删除的元素个数。根据count值得不同,lrem执行会有部分不同。
- 当count > 0时,会从列表左边开始删除前count个值为value的元素。
- 当count < 0时,会从列表右边开始删除前count个值为value的元素。
- 当count = 0时,会从列表删除所有值为value的元素。
127.0.0.1:6379> lrange articles 0 2
1) "article1"
2) "article2"
3) "article3"
127.0.0.1:6379> lrem articles 1 article2
(integer) 1
127.0.0.1:6379> lrange articles 0 2
1) "article1"
2) "article3"
127.0.0.1:6379>
1.6 lindex和lset
lindex key index
lset key index value
获得/设置指定索引的元素值
127.0.0.1:6379> lrange articles 0 2
1) "article1"
2) "article3"
127.0.0.1:6379> lindex articles 1
"article3"
127.0.0.1:6379> lset articles 2 article4
(error) ERR index out of range
127.0.0.1:6379> lset articles 1 article4
OK
127.0.0.1:6379> lrange articles 0 2
1) "article1"
2) "article4"
127.0.0.1:6379>
1.7 ltrim
ltrim key start end
只保留列表指定片段,即删除指定索引范围之外的所有元素。与lrange
不同的是,lrange
不删除元素。
127.0.0.1:6379> lrange articles 0 2
1) "article1"
2) "article4"
127.0.0.1:6379> ltrim articles 1 1
OK
127.0.0.1:6379> lrange articles 0 2
1) "article4"
127.0.0.1:6379>
1.8 linsert
linsert key before|after pivot value
首先会在列表中从左到右查找值为pivot的元素,然后根据第二个参数是before还是after来决定value插入该元素的前面还是后面。
127.0.0.1:6379> lrange articles 0 2
1) "article4"
127.0.0.1:6379>
127.0.0.1:6379> linsert articles before article4 article3
(integer) 2
127.0.0.1:6379> lrange articles 0 2
1) "article3"
2) "article4"
127.0.0.1:6379>
1.9 rpop
rpoplpush source destination
将元素从一个列表转到另一个列表。先执行rpop
命令在执行lpush
命令。rpoplpush
会先从source列表类型建的右端弹出一个元素,然后将其加入到destination列表类型键的左边,并返回这个元素的值,整个过程都是原子性的。
127.0.0.1:6379> rpoplpush articles articles1
"article4"
127.0.0.1:6379> lrange articles 0 2
1) "article3"
127.0.0.1:6379> lrange articles1 0 2
1) "article4"
127.0.0.1:6379>