0

0

redis的list数据类型相关命令分析及如何使用

WBOY

WBOY

发布时间:2023-05-28 09:32:18

|

1264人浏览过

|

来源于亿速云

转载

    list列表简介

    • list是一个按照插入顺序排序的字符串数组(说通俗点,仍然存储字符串)。你可以添加一个元素到列表的头部(左边)或者尾部(右边),个列表最多可以包含^32-1个元素(每个列表超过40亿个元素)。

    • Redis中的list和Java中的LinkedList很像,底层都是一种链表结构,list的插入和删除操作非常快,时间复杂度为 0(1),不像数组结构插入、删除操作需要移动数据。尽管表面上仍然是列表,但Redis中的列表底层实现并不仅限于简单的双向链表。

    • 当数据量较少的时候它的底层存储结构为一块连续内存,称之为ziplist(压缩列表),它将所有的元素紧挨着一起存储,分配的是一块连续的内存;当数据量较多的时候将会变成quicklist(快速链表)结构。

    • 可单纯的链表也是有缺陷的,链表的前后指针prev和next会占用较多的内存,会比较浪费空间,而且会加重内存的碎片化。自Redis 3.2之后,Redis使用混合数据结构quicklist(快速链表),该结构由ziplist和链表组成。

    常用命令

    添加命令

    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
    从列表右侧弹出元素并返回尾部元素

    LALALAND
    LALALAND

    AI驱动的时尚服装设计平台

    下载
    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 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中没有元素

    redis的list数据类型相关命令分析及如何使用

    redis的list数据类型相关命令分析及如何使用

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

    redis的list数据类型相关命令分析及如何使用

    redis的list数据类型相关命令分析及如何使用

    应用场景

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

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

    相关专题

    更多
    java
    java

    Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    831

    2023.06.15

    java正则表达式语法
    java正则表达式语法

    java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

    735

    2023.07.05

    java自学难吗
    java自学难吗

    Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

    733

    2023.07.31

    java配置jdk环境变量
    java配置jdk环境变量

    Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    396

    2023.08.01

    java保留两位小数
    java保留两位小数

    Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    398

    2023.08.02

    java基本数据类型
    java基本数据类型

    java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

    446

    2023.08.02

    java有什么用
    java有什么用

    java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

    430

    2023.08.02

    java在线网站
    java在线网站

    Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

    16925

    2023.08.03

    c++主流开发框架汇总
    c++主流开发框架汇总

    本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

    25

    2026.01.09

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    进程与SOCKET
    进程与SOCKET

    共6课时 | 0.3万人学习

    Redis+MySQL数据库面试教程
    Redis+MySQL数据库面试教程

    共72课时 | 6.3万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号