文章目录
- 常用命令
- lpush & lpushx
- rpush & rpushx
- lrange & lpop & rpop
- lindex & linsert
- llen
- 阻塞版本的命令
- 内部编码
列表类型是⽤来存储多个有序的字符串,⼀个列表最多可以存储 2^32 - 1 个元素,允许有重复的元素。
列表在两端都可以插入和弹出,还可以获取到指定范围的元素,或者通过索引下标获取元素。
常用命令
lpush & lpushx
LPUSH key element [element ...]
LPUSHX key element [element ...]
lpush:将⼀个或者多个元素从左侧放⼊(头插)到 key 中。
lpushx:和 lpush 一样,不过 key 必须已存在。
rpush & rpushx
与上述的 lpush 和 lpushx 一样,不过这两是从右往左插入,也就是尾插。
lrange & lpop & rpop
LRANGE key start stop
LPOP key
RPOP key
lrange:获取从左往右在指定的范围内的值,0为正数第一个,-1为倒数第一个。
lpop:取出左侧第一个元素,也就是头删。
rpop:取出右侧第一个元素,也就是尾删。
lindex & linsert
LINDEX key index
LINSERT key <BEFORE | AFTER> pivot element
lindex:获取从左往右的第 index 下标的值。
linsert:在指定的元素的(BEFORE 代表前面,AFTER 代表后面)插入元素。
llen
获取列表的长度
阻塞版本的命令
lpop 和 rpop 都是非阻塞的,它们的阻塞版本为 blpop 和 brpop
主要区别在于:
- 当列表不为空时,没有区别
- 当列表为空时,并且指定时间后没有元素加入:则非阻塞会立即返回 nil ,而阻塞则在指定时间后返回 nil。
- 当列表为空时,并且指定时间后有元素加入:则非阻塞会立即返回 nil ,而阻塞则在指定时间后返回新增元素。
内部编码
list 有两种内部编码:
- 当列表的元素个数⼩于 list-max-ziplist-entries 配置(默认 512 个),同时列表中每个元素的⻓度都⼩于 list-max-ziplist-value 配置(默认 64 字节)时,redis 会选用 ziplist 实现,节省内存消耗。
- 当不满足上述时,则会选择 linkedlist 实现