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执行会有部分不同。

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> 
上一篇下一篇

猜你喜欢

热点阅读