【Redis】List 数据类型

本文详细介绍了Redis中常用的列表操作命令,如lpush/lpushx/rpush/rpushx用于在列表两端插入元素,lrange/lpop/rpop用于获取和删除指定范围或位置的元素,lindex/linsert支持按索引插入元素,以及阻塞版本的lpop/rpop。同时讨论了列表的内部编码机制,包括ziplist和linkedlist的选择条件。


列表类型是⽤来存储多个有序的字符串,⼀个列表最多可以存储 2^32 - 1 个元素,允许有重复的元素。

列表在两端都可以插入和弹出,还可以获取到指定范围的元素,或者通过索引下标获取元素。

常用命令

lpush & lpushx

LPUSH key element [element ...]
LPUSHX key element [element ...]

lpush:将⼀个或者多个元素从左侧放⼊(头插)到 key 中。

lpushx:和 lpush 一样,不过 key 必须已存在。

img

rpush & rpushx

与上述的 lpush 和 lpushx 一样,不过这两是从右往左插入,也就是尾插。

img

lrange & lpop & rpop

LRANGE key start stop
LPOP key
RPOP key

lrange:获取从左往右在指定的范围内的值,0为正数第一个,-1为倒数第一个。

lpop:取出左侧第一个元素,也就是头删。

rpop:取出右侧第一个元素,也就是尾删。

img

lindex & linsert

LINDEX key index
LINSERT key <BEFORE | AFTER> pivot element

lindex:获取从左往右的第 index 下标的值。

linsert:在指定的元素的(BEFORE 代表前面,AFTER 代表后面)插入元素。

img

llen

获取列表的长度

阻塞版本的命令

lpop 和 rpop 都是非阻塞的,它们的阻塞版本为 blpop 和 brpop

主要区别在于:

  • 当列表不为空时,没有区别
  • 当列表为空时,并且指定时间后没有元素加入:则非阻塞会立即返回 nil ,而阻塞则在指定时间后返回 nil。
  • 当列表为空时,并且指定时间后有元素加入:则非阻塞会立即返回 nil ,而阻塞则在指定时间后返回新增元素。

内部编码

list 有两种内部编码:

  • 当列表的元素个数⼩于 list-max-ziplist-entries 配置(默认 512 个),同时列表中每个元素的⻓度都⼩于 list-max-ziplist-value 配置(默认 64 字节)时,redis 会选用 ziplist 实现,节省内存消耗。
  • 当不满足上述时,则会选择 linkedlist 实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHJBL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值