Redis-带你深入学习数据类型list

这篇具有很好参考价值的文章主要介绍了Redis-带你深入学习数据类型list。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1、list列表

2、list相关命令

2.1、添加相关命令:rpush、lpush、linsert

2.2、查找相关命令:lrange、lindex、llen

2.3、删除相关命令:lpop、rpop、lrem、ltrim

2.4、修改相关命令:lset

2.5、阻塞相关命令:blpop、brpop

3、应用场景

3.1、消息队列

 3.2、最新列表


1、list列表

        redis中list并非是一个简单的数组,而更像是一个双端队列,具体的结合下面的命令你会更加容易理解~

 list的特点:

  • list中元素是有序的----存放有序
  • 列表中元素可以重复
  • 列表头部尾部都可以进行插入或删除元素

2、list相关命令

下述所有命令涉及到的头部都可理解为列表左侧,列表末尾都可理解为列表右侧 

2.1、添加相关命令:rpush、lpush、linsert

rpush:

  • rpush:在列表尾部添加元素;若key不存在则新增key,然后再添加相应元素;若存在则在末尾追加
  • 语法:rpush key value [value...]
  • 返回值:添加后的元素数量
  • 时间复杂度O(1)---O(k)

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

lpush:

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

查看是否正确:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

  • lpush:在列表头部添加元素;若key不存在则新增key,然后再添加相应元素;若存在则在头部添加
  • 语法:lpush key value [value...]
  • 返回值:添加后的元素数量
  • 时间复杂度O(1)---O(k)

linsert:

  •  linsert:在特定元素前或后添加元素
  • 语法:linsert key before | after pivot value
  • 返回值:添加后元素个数
  • 时间复杂度O(n)--n为头部到pivot的距离

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

2.2、查找相关命令:lrange、lindex、llen

lrange:

  •  lrange:在特点元素前或后添加元素
  • 语法:lrange key start stop
  • 返回值:返回指定区间的元素
  • 时间复杂度O(n)--n为头部到start的距离加上stop的范围

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

注:

  • 下标可为负数 
  • 若下标不合法,则会尽可能的返回可以获取到的值

lindex:

  • lindex:给定下标,获取相应元素
  • 语法:lindex key index
  • 返回值:相应的值;无则返回nil
  • 时间复杂度O(n)---n值索引的偏移量

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

llen:

  • llen:获取列表的长度
  • 语法:llen key
  • 返回值:列表的长度
  • 时间复杂度(1)

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

2.3、删除相关命令:lpop、rpop、lrem、ltrim

lpop:

  • lpop:删除列表头部的第一个元素
  • 语法:lpop key
  • 返回值:删除的元素的值
  • 时间复杂度(1)

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

rpop:

  • rpop:删除列表的末尾的第一个元素
  • 语法:rpop key
  • 返回值:被删除的元素的值
  • 时间复杂度(1)

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

注:lpop和rpop在redis6之后就增加参数了,可以指定删除前几个或后几个,例rpop key count 

lrem:

  • lrem:删除指定的元素,且可指定具体删除几个
  • 语法:lrem key count value
  • 返回值:被删的元素的个数
  • 时间复杂度(k)----k为元素数
  • 补充:count大于0时从头部开始往后删,小于0时从末尾往前删,等于0时删除全部

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

ltrim:

  • ltrim:保留指定区间的值,其余的全删除
  • 语法:ltrim key start stop
  • 返回值:命令执行成功返回ok
  • 时间复杂度(k)---k元素个数
  • 补充:start 和 stop是闭区间

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

2.4、修改相关命令:lset

  • lset:根据指定下标修改元素值
  • 语法:lset key index value
  • 返回值:执行成功返回ok;下标越界会弹出相应提示,如下举例
  • 时间复杂度O(n)

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

2.5、阻塞相关命令:blpop、brpop

blpop:

  • blpop:lpop的阻塞版本
  • 语法:blpop key [key...] timeout
  • 返回值:返回值有两个以列表形式,第一个是删除的是那个key的首部元素,第二个是删除的元素的值~
  • 时间复杂度O(1)
  • 补充:timeout为该阻塞最长为多长时间,单位:s;在改命令阻塞时,redis依然可以处理其他命令

举例:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

上述由于key中有值,所以无需等待,立即可删除

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

上述由于超出时间后,依然没有值可进行删除

操作一:

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

操作二:

 Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

上述在阻塞期间,有值可删时立即删除,命令执行完成~ 

brpop:

  • brpop:rpop的阻塞版本
  • 语法:brpop key [key...] timeout
  • 返回值:返回值有两个以列表形式,第一个是删除的是那个key的首部元素,第二个是删除的元素的值~
  • 时间复杂度O(1)
  • 补充:同上命令blpop 

3、应用场景

3.1、消息队列

        如下图所示,Redis的lpush + brpop命令组合即可实现阻塞队列,生产者客户端使用lpush从列表左侧插入元素,多个消费者客户端使用brpop命令阻塞式的争抢列表尾部的元素,多个客户端保证了消费的负载均衡和高可用;

Redis-带你深入学习数据类型list,Redis,redis,缓存,数据库,list

 3.2、最新列表

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

        但是,并不是所有的最新列表都能用list类型实现,因为对于频繁更新的列表,list类型的分页可能导致列表元素重复或漏掉,举个例子,当前列表里由表头到表尾依次有(E,D,C,B,A)五个元素,每页获取3个元素,用户第一次获取到(E,D,C)三个元素,然后表头新增了一个元素F,列表变成了(F,E,D,C,B,A),此时用户取第二页拿到(C,B,A),元素C重复了。只有不需要分页(比如每次都只取列表的前5个元素)或者更新频率低(比如每天凌晨更新一次)的列表才适合用list类型实现。对于需要分页并且会频繁更新的列表,需用使用有序集合sorted set类型实现。另外,需要通过时间范围查找的最新列表,list类型也实现不了,也需要通过有序集合sorted set类型实现,如以成交时间范围作为条件来查询的订单列表。之后在介绍有序集合sorted set类型的应用场景时会详细介绍sorted set类型如何实现最新列表。

好啦,本期到这里了,下期见~文章来源地址https://www.toymoban.com/news/detail-702961.html

到了这里,关于Redis-带你深入学习数据类型list的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis数据类型(list\set\zset)

    \\\"maybe it\\\'s why\\\"          列表类型是⽤来存储多个 有序 的字符串,列表中的每个字符串称为元素(element),⼀个列表最多可以存储个2^32 - 1个元素。在Redis中,可以对列表两端插⼊(push)和弹出(pop),还可以获取指定范围的元素列表、获取指定索引下标的元素等。列表是

    2024年02月11日
    浏览(42)
  • Redis的五种数据类型(string、hash 、list、set、zset)

                     Redis 提供了丰富的数据类型,常见的有五种: String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合) 。         String 是最基本的 key-value 结构,key 是唯一标识,value 是具体的值,value其实不仅是字符串, 也可以是数字(整

    2024年01月25日
    浏览(54)
  • 深入学习 redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展

    目录 前言 Stream geospatial HyperLogLog Bitmaps Bitfields redis 中最关键的五个数据类型 String、List、Hash、Set、Zset 应用最广泛,同时 redis 也推出了额外的 5 个数据类型,他们分别是针对特殊场景才进行的应用的. Ps:这几种类型的具体使用不用记,记你也记不住,因为不常用,因此我们

    2024年02月15日
    浏览(62)
  • Redis 数据类型及其常用命令一(string、list、set、zset、hash)

    1、简介         Redis 的常用数据类型有十种,分别为:string、list、set、zset、hash、geo、hyperloglog、bitmap、bitfield、stream。熟练使用各种数据类型,能够快速结合场景进行使用。 注:我们所说的数据类型是指 value 的数据类型,key 都是字符串。 所有类型的命令查看:help @数据类

    2024年03月13日
    浏览(58)
  • Redis之数据类型String、List、Hash、Set、Sorted Set(详细)

    一、String数据类型 1、SET/GET/APPEND/STRLEN (1) APPEND (2) SET/STRLEN 2、 INCR/ DECR/INCRBY/DECRBY (1)INCR/ DECR (2) INCRBY/DECRBY INCRBY key increment:key值增加指定的整数DECRBY key decrement:key值减少指定的整数  3、GETSET 4、 SETEX  5、SETNX 6、MSET/MGET/MSETNX  二、List数据类型 1、LPUSH/LPUSHX/

    2024年02月11日
    浏览(45)
  • redis List类型命令

    在Redis中,List(列表)是一种有序的、可重复的数据结构,它支持插入、删除和获取元素的操作。以下是一些常见的Redis List类型命令: LPUSH:将一个或多个值从列表的左侧插入。 其中, key 是列表的键名, value1 、 value2 等是要插入的值。 示例: 执行以上命令后,列表mylis

    2024年02月13日
    浏览(34)
  • Redis——list类型详解

    Redis中的list类型相当于双端队列,支持头插,头删,尾插,尾删,并且列表中的内容是可以重复的。 如果搭配使用rpush和lpop,那么就相当于队列 如果搭配使用rpush和rpop,那么就相当于栈 向列表中头插一个或多个元素,返回list的长度。如果key已经存在,并且对应的value不是

    2024年02月12日
    浏览(33)
  • 【redis】list类型命令简述

    redis的list类型,可以存储双向链表作为value,key保留有head和tail指针可以指向双向链表的头和尾,因此可以直接从头或尾对list进行操作。 全部命令如下: 下面示例如下: lpush :lpush key e1 e2 e3…将数据从头那里推入list lpop :lpop key,将数据从head弹出 这样2个同向的命令组合起

    2024年02月17日
    浏览(44)
  • redis五大类型分析--list(1)

    此篇为对redis五大数据类型中list的分析,希望能有所帮助 listTypePush函数 分析: 该函数将一个元素插入到指定的列表对象 \\\'subject\\\', 插入位置由 \\\'where\\\' 决定是在列表头部还是尾部插入,调用者不需要自己来增加 \\\'value\\\' 的 refcount,该函数会负责处理。 作用: 实现命令函数push

    2024年02月13日
    浏览(37)
  • redis五大类型分析--list(2)

    此篇为对redis五大数据类型中list的分析,希望能有所帮助  listTypeGet函数 分析: 利用createStringObject函数和createStringObjectFromLongLong函数,检查编码类型并获取元素的值 listTypeInsert函数 分析: 对entry的插入操作,在 entry 的位置前或后方插入元素 value  listTypeReplace函数 分析: 替

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包