zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Redis(六)-Redis的常用数据类型之list列表

RedisList列表 常用 数据类型
2023-09-27 14:19:46 时间

您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦
💪🏻 1. Python基础专栏,基础知识一网打尽,9.9元买不了吃亏,买不了上当。 Python从入门到精通
❤️ 2. Python爬虫专栏,系统性的学习爬虫的知识点。9.9元买不了吃亏,买不了上当,持续更新中 。python爬虫入门进阶
❤️ 3. Ceph实战,从原理到实战应有尽有。 Ceph实战
❤️ 4. Java高并发编程入门,打卡学习Java高并发。 Java高并发编程入门
😁 5. 社区逛一逛,周周有福利,周周有惊喜。码农飞哥社区,飞跃计划
全网同名【码农飞哥】欢迎关注,个人VX: wei158556

简介

Redis中的列表是简单的字符串列表,你可以添加一个元素到列表的头部(左边)或者尾部(右边),可以用它来做微博时间轴列表,还可以充当队列

常用命令

  1. 从左边/右边插入一个或多个值
#从左边插入
lpush <key1> <value1>  <value2> ......
#从右边插入
rpush <key1> <value1>  <value2> ......
  1. 从左边/右边吐出一个值,取出一个值就删除这个值,值在键在,值亡键亡。
#从左边吐出
lpop <key1>
#从右边吐出
rpop <key1>

左边插入,左边吐出
右边插入,右边吐出
左边插入,右边吐出
从上述示例中可以看出,从左边插入左边吐出的话,那就是先进后出的形式,从左边插入右边吐出的话那就是先进先出的形式。

  1. <key1>列表右边吐出一个值,插到<key2> 列表左边
rpoplpush <key1> <key2>
  1. 按照索引下标获得元素(从左到右), 其中<start> 为0时指左边第一个, <stop> 为-1时指右边第一个,(0~-1 表示获取所有)
lrange <key> <start> <stop>

在这里插入图片描述

  1. 按照索引下标获得元素(从左到右)
lindex <key> <index>
  1. 获得列表长度
llen <key>

在这里插入图片描述

  1. <value> 的前面|后面插入<newvalue> 插入值
#在`<value>` 的前面插入`<newvalue>` 插入值
linsert <key> before <value> <newvalue>
#`<value>` 的后面插入`<newvalue>` 插入值
linsert <key> after <value> <newvalue>

在这里插入图片描述

  1. <value>的左边删除n个<value>(从左到右)
lrem <key1> <n> <value>

在这里插入图片描述

  1. 将列表<key> 下标为<index> 的值替换成<value>
lset <key> <index> <value>

在这里插入图片描述

数据结构

List的数据结构为快速链表 quickList。
在列表元素较少的情况下使用一块连续的内存存储,这个结构是ziplist,也就是压缩列表。
它将所有的元素紧挨着一起存储,分配的是一块连续的内存。
当数据量较多的时候才会改成 quickList。
因为普通的链表需要的附加指针空间太大, 会比较浪费空间,比如这个列表中存的只是int类型数据,结构上海需要两个额外的指针prev和next。
在这里插入图片描述

Redis 将链表和ziplist结合起来组成了quicklist。也就是将多个ziplist 使用双向指针串起来使用。这样既满足了快速的插入删除性能,又不会出现太大的空间冗余。
详情可以了解这篇文章Redis(七)-Redis的list列表的数据结构-快速链表

参考

《Redis的设计与实现》
Redis基本类型及其数据结构