Redis的列表(List)类型

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

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

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

一、常用命令

1、向列表两端添加元素

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

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

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

接着从右边添加元素:

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

2、弹出元素

1lpop key 2rpop 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、存储评论列表

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

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

java将前端的json数组字符串转换为列表

记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang

tbox链表list和list_entry的使用

TBOX中提供了各种列表操作:1.list:元素在内部维护的双向链表2.list\_entry:元素在外部维护的双向链表3.single\_list:元素在内部维护的单向链表4.single\_list\_entry:元素在外部维护的单向链表由于双链和单链的接口使用类似,这里主要就

盘点Python基础之列表的那些事儿

大家好,我是蔡同学,今天给大家分享列表的知识一、列表的格式示例:namesList'xiaoWang','xiaoZhg','xiaa'比C语言的数组强大的地方在于列表中的元素可以是不同类型的。testList1,'a'二、列表的相关操作("增"、"删"、"改",“查”)<1添加元素append()通过append可以向列表添

Redis 列表(List)

Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素导列表的头部(左边)或者尾部(右边)一个列表最多可以包含2321个元素(4294967295,每个列表超过40亿个元素)。实例redis127.0.0.1:6379LPUSHw3ckeyredis(integer)1

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中集成redisTemplate对Redis的操作(二)List类型的操作1、向列表左侧添加数据LongleftPushredisTemplate.opsForList().leftPush("name",name);2、向列表右侧添加数据