Redis的列表(List)类型

Stella981
• 阅读 574

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

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

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

一、常用命令

1、向列表两端添加元素

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

Redis的列表(List)类型

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

Redis的列表(List)类型

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

接着从右边添加元素:

Redis的列表(List)类型

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

2、弹出元素

lpop key
rpop key

Redis的列表(List)类型

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

3、获取列表片段

lrange key start stop

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

Redis的列表(List)类型

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

4、删除列表中指定的值

lrem key count value

count:

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

Redis的列表(List)类型

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

二、实际应用场景

1、存储文章ID列表

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

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

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

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

点赞
收藏
评论区
推荐文章
Irene181 Irene181
2年前
盘点Python基础之列表的那些事儿
大家好,我是蔡同学,今天给大家分享列表的知识一、列表的格式示例:namesList'xiaoWang','xiaoZhg','xiaa'比C语言的数组强大的地方在于列表中的元素可以是不同类型的。testList1,'a'二、列表的相关操作("增"、"删"、"改",“查”)<1添加元素append()通过append可以向列表添
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Easter79 Easter79
2年前
tbox链表list和list_entry的使用
TBOX中提供了各种列表操作:1.list:元素在内部维护的双向链表2.list\_entry:元素在外部维护的双向链表3.single\_list:元素在内部维护的单向链表4.single\_list\_entry:元素在外部维护的单向链表由于双链和单链的接口使用类似,这里主要就
Stella981 Stella981
2年前
Redis 列表(List)
Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)一个列表最多可以包含2321个元素(4294967295,每个列表超过40亿个元素)。实例redis127.0.0.1:6379LPUSHw3ckeyredis(integer)1
Easter79 Easter79
2年前
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)
SpringBoot中集成redisTemplate对Redis的操作(二)List类型的操作1、向列表左侧添加数据LongleftPushredisTemplate.opsForList().leftPush("name",name);2、向列表右侧添加数据
Stella981 Stella981
2年前
Python容器
列表列表的元素可以修改的,通过直接赋值就能修改列表的元素。使用\\创建列表:weekdays\'monday','tuesday','wednesday','thursday','friday'\也可以使用list()创建空列表:weekdayslist()使用append()在列表尾部添加元素
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Stella981 Stella981
2年前
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)
SpringBoot中集成redisTemplate对Redis的操作(二)List类型的操作1、向列表左侧添加数据LongleftPushredisTemplate.opsForList().leftPush("name",name);2、向列表右侧添加数据
Stella981 Stella981
2年前
Python3中的列表用法,看这一篇就够了
类似C语言中的列表用法\创建:列表使用中括号表示,内部元素使用逗号隔开,元素的数据类型允许不一致,允许多层嵌套name
Stella981 Stella981
2年前
Redis(四)——消息队列
Redis不仅可作为缓存服务器,还可用作消息队列。它的列表类型天生支持用作消息队列。\\性质:\\由于Redis的列表是使用双向链表实现的,保存了头尾节点,所以在列表头尾两边插取元素都是非常快的。所以可以直接使用Redis的List实现消息队列,只需简单的两个指令lpush和rpop或者rpush和lpop。(列表常用命令)R