Redis的列表(List)类型

        列表类型(List)可以存储一个有序的字符串列表,常用的操作就是向列表两端添加元素,或者获取列表中某一个片段。

        列表类型内部使用双向链表(double linked list)实现的,所以向列表两端添加或删除元素的速度非常快,越是接近两端的元素就越快,但是,也有弊端,就是通过索引访问元素的速度比较慢。

        因为使用了双向链表实现存储的,所以在命令上也有两种:L和R。“L”代表左,“R”代表右。

一、常用命令

1、向列表两端添加元素

LPUSH key value1 [value2 ... ]
RPUSH key value1 [value2 ... ]

第一行命令向key为numbers的列表添加一个“1”,然后再添加了两个元素,如下图所示:

 

由于使用lpush,即向左添加元素到队列,所以第二条命令一次性添加两个元素,会先将2在列表的左边添加进去,接着把3从左边添加进去,所以会看到上图的效果,lrange命令也进行了验证。(lrang命令是用于获得列表片段)

接着从右边添加元素:

lpush命令和rpush命令的用法是一样的,前者从左添加,后者从右添加。

2、弹出元素

lpop key
rpop key

redis的列表类型有点像栈,上面第一条命令表示从左边弹出一位元素,即“3”,第二条命令表示从右弹出一位元素,即“-1”,再次查看numbers列表的元素,参数依然是0和4(0和4表示索引),但返回只有2,1,0.说明pop这个命令会直接将列表的元素从列表中“删除”。

3、获取列表片段

lrange key start stop

start和stop表示索引,列表的起始索引值为0,lrange命令也支持负索引,如:

上图的-3表示从右边开始第三位元素,-1表示从右边开始的第一位,如此类推。

4、删除列表中指定的值

lrem key count value

count:

  • 当count > 0时,lrem命令会从左边开始删除前count个值为value的元素;
  • 当count < 0 时,lrem命令会从右边开始删除前 |count| 个值为value的元素;
  • 当count = 0时,lrem命令会删除所有值为value的元素。

上图时从右边删除前两个值为2元素。

二、实际应用场景

1、存储文章ID列表

        当每次发布新文章时,就可以使用lpush命令将文章ID加入到列表中,这样显示文章列表时,就会根据加入文章加入列表的顺序进行倒序显示,即最新发布的文章排在最前面。

        用列表存储文章ID时,要注意两个问题:

文章发布时间不易修改;
当文章数量较多时,访问中间文章的速度比较慢,前面也介绍过,列表类型存储是使用双向链表实现的。
2、存储评论列表

        将最新的评论放在列表的左边。

猜你喜欢

转载自www.cnblogs.com/SysoCjs/p/10327149.html