redis的list数据类型相关命令介绍及使用

 更新时间:2022年01月14日 16:07:49   作者:凹凸曼蓝博one  
本文主要介绍了redis的list数据类型相关命令介绍及使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

list列表简介

  • list是简单的字符串列表(说通俗点,存储的还是字符串),按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边),个列表最多可以包含^32-1个元素(每个列表超过40亿个元素)。
  • Redis中的list和Java中的LinkedList很像,底层都是一种链表结构,list的插入和删除操作非常快,时间复杂度为 0(1),不像数组结构插入、删除操作需要移动数据。像归像,但是redis中的list底层可不是一个双向链表那么简单。
  • 当数据量较少的时候它的底层存储结构为一块连续内存,称之为ziplist(压缩列表),它将所有的元素紧挨着一起存储,分配的是一块连续的内存;当数据量较多的时候将会变成quicklist(快速链表)结构。
  • 可单纯的链表也是有缺陷的,链表的前后指针prev和next会占用较多的内存,会比较浪费空间,而且会加重内存的碎片化。在redis 3.2之后就都改用ziplist+链表的混合结构,称之为quicklist(快速链表)。

常用命令

添加命令

lpush key value

从左边插入元素(将一个或多个值插入到列表头部)

127.0.0.1:6379> lpush ids 1
(integer) 1
127.0.0.1:6379> lrange ids 0 -1
1) "1"
127.0.0.1:6379> lpush ids 2
(integer) 2
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"

rpush key value

从右边插入元素(将一个或多个值插入到列表的尾部(最右边))

127.0.0.1:6379> rpush ids 3
(integer) 3
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"
3) "3"

linsert key BEFORE|AFTER pivot value
向某个元素前/后插入元素,返回结果为当前列表长度,注意列表不存在或者指定元素不存在列表中时,都将不执行任何操作。

//元素3前插入0
127.0.0.1:6379> linsert ids before 3 0
(integer) 4
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"
3) "0"
4) "3"
//元素3后插入0
127.0.0.1:6379> linsert ids after 3 4
(integer) 5
127.0.0.1:6379> lrange ids 0 -1
1) "2"
2) "1"
3) "0"
4) "3"
5) "4"

查询命令

lrange key start end
获取列表中指定范围内的元素列表;若start值大于列表end值则返回空列表
如上已经展示过了

lindex key index
获取列表指定索引下标的元素

127.0.0.1:6379> lindex ids 0
"2"
127.0.0.1:6379> lindex ids -1
"4"

llen key
获取列表长度;列表不存在则返回0

127.0.0.1:6379> llen ids
(integer) 5

弹出/删除命令

lpop key
从列表左侧弹出元素并返回头部元素

127.0.0.1:6379> lpop ids
"2"
127.0.0.1:6379> lrange ids 0 -1
1) "1"
2) "0"
3) "3"
4) "4"

rpop key
从列表右侧弹出元素并返回尾部元素

127.0.0.1:6379> rpop ids
"4"
127.0.0.1:6379> lrange ids 0 -1
1) "1"
2) "0"
3) "3"

lrem key count value
从列表中找到等于value的元素进行删除,根据count的不同分为三种情况:
count > 0,从表头开始向表尾,移除数量为count个元素;
count < 0,从表尾开始向表头,移除数量为count的绝对值个元素;
count = 0,移除表中所有与 value 相等的值

127.0.0.1:6379> lrem ids 0 3
(integer) 1
127.0.0.1:6379> lrange ids 0 -1
1) "1"
2) "0"

ltrim key start end
对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除

127.0.0.1:6379> ltrim ids 0 0
OK
127.0.0.1:6379> lrange ids 0 -1
1) "1"

修改命令

lset key index value
修改指定下标的元素的值设置为value

127.0.0.1:6379> lset ids 0 0
OK
127.0.0.1:6379> lrange ids 0 -1
1) "0"

阻塞弹出命令

blpop key [key …] timeout
移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时(单位秒)或发现可弹出元素为止

brpop key [key …] timeout
移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止
演示:
开启三个reids连接窗口,第一个执行blpop ,第二个执行brpop ,第三个执行添加:
可以看到窗口1和2执行完都已经阻塞在这里,这是因为ids中没有元素

在这里插入图片描述

在这里插入图片描述

窗口3执行添加:lpush ids 1 2 3 4 5 6
可以看到窗口1和2立即弹出对应元素:

在这里插入图片描述

在这里插入图片描述

应用场景

消息队列:lpop和rpush(或者反过来,lpush和rpop)能实现队列的功能

朋友圈的点赞列表、评论列表、排行榜:lpush命令和lrange命令能实现最新列表的功能,每次通过lpush命令往列表里插入新的元素,然后通过lrange命令读取最新的元素列表。

到此这篇关于redis的list数据类型相关命令介绍及使用的文章就介绍到这了,更多相关redis list数据类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解redis desktop manager安装及连接方式

    详解redis desktop manager安装及连接方式

    这篇文章主要介绍了redis desktop manager安装及连接方式,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-09-09
  • WINDOWS中REDIS主从配置实现代码解析

    WINDOWS中REDIS主从配置实现代码解析

    这篇文章主要介绍了WINDOWS中REDIS主从配置实现代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Redis密码设置与访问限制实现方法

    Redis密码设置与访问限制实现方法

    这篇文章主要介绍了Redis密码设置与访问限制实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Redis实现分布式队列浅析

    Redis实现分布式队列浅析

    Redis将数据存储在内存中,使得读写速度非常快,经常被用来做缓存系统,这里我们将redis用来做一个分布式的消息队列。这篇文章主要介绍了使用redis来作为消息队列,并且进行分布式主从配置,有需要的朋友可以参考借鉴,下面来一起看看吧。
    2016-11-11
  • 让Redis在你的系统中发挥更大作用的几点建议

    让Redis在你的系统中发挥更大作用的几点建议

    Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储;它的数据模型非常独特,用的是单线程。另一个大区别在于,你可以在开发环境中使用Redis的功能,但却不需要转到Redis
    2014-06-06
  • Redis偶发连接失败案例实战记录

    Redis偶发连接失败案例实战记录

    这篇文章主要给大家介绍了关于Redis偶发连接失败的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使Redis具有一定的参考学习价值,用需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • 浅谈Redis中的内存淘汰策略和过期键删除策略

    浅谈Redis中的内存淘汰策略和过期键删除策略

    本文主要介绍了浅谈Redis中的内存淘汰策略和过期键删除策略,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Windows下Redis安装配置教程

    Windows下Redis安装配置教程

    这篇文章主要为大家详细介绍了Windows下Redis安装配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 使用 Redis 流实现消息队列的代码

    使用 Redis 流实现消息队列的代码

    这篇文章主要介绍了使用 Redis 流实现消息队列,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 在项目中使用redis做缓存的一些思路

    在项目中使用redis做缓存的一些思路

    这篇文章主要介绍了在项目中使用redis做缓存的一些思路,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09

最新评论