Redis的列表(List)类型

Posted Syso(Alt+/)Cjs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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、存储评论列表

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






以上是关于Redis的列表(List)类型的主要内容,如果未能解决你的问题,请参考以下文章

缓存数据库-redis数据类型和操作(list)

redis 基本数据类型-列表(List)

redis的数据类型List,其原生命令和php操作Redis List函数介绍

list列表类型的操作——redis

Redis源码剖析 - Redis数据类型之列表List

Redis 基础 -- 列表 List 类型 和 List 类型的常用命令