Redis-list类型

发布于:2025-04-08 ⋅ 阅读:(18) ⋅ 点赞:(0)

这里只是介绍命令使用

列表是用来存储多个有序的字符串

可以用来充当栈和队列的角色

列表特点:

  1. 列表中的元素是有序的,可以通过索引下标来获取某个元素或者某个范围的元素

  2. 获取和删除有区别

  3. 元素可以重复

命令

LPUSH

将一个或者多个元素从左侧放入到list中(头插法)

lpush key element {element ……}

时间复杂度: O(N) N表示插入的元素个数

返回值: 插入新对象之后 list 的长度

LPUSHX

在 key 存在的时候,将一个或者多个元素从左侧放入,不存在就会直接返回

lpushx key element {element……}

时间复杂度: O(N) N表示插入的元素个数

返回值: 插入后 list 的长度, key 不存在就是返回 0

RPUSH

将一个或者多个元素从右侧进行插入(尾插)

rpush key element {element……}

时间复杂度: O(N) N为插入的元素个数

返回值: 插入后 list 的长度

RPUSHX

在 key 存在时,将一个或者多个元素从右侧插入,和 lpushx 类似

rpushx key element {element……}

时间复杂度: O(N) N为插入的元素个数

返回值: 插入后 list 的长度

LRANGE

获取从 start 到 end 区间的所有元素,左闭右闭

lrange key start end

时间复杂度: O(N)

返回值: 指定区间的元素

LPOP

从 list 左侧取出元素(从头删除)

lpop key

时间复杂度: O(1)

返回值: 对应取出的元素,如果没有元素或者key不存在返回 nil

RPOP

从 list 右侧取出对应元素(尾删),其余与 LPOP 相似

rpop key

时间复杂度: O(1)

返回值: 对应取出的元素,如果没有元素或者key不存在返回 nil

LINDEX

获取对应下标的元素(从左往右数)

lindex key value

时间复杂度: O(N)

返回值: 下标对应的元素或者 nil

LINSERT

在指定位置插入元素

linsert key {before | after} pivot(要插入的位置) element

时间复杂度: O(N)

返回值: 插入之后list的新长度

LLEN

获取 list 长度

llen key

时间复杂度: O(1)

返回值: list 的具体长度

阻塞版命令

区别

  1. 在 list 中有元素的情况下,阻塞版和非阻塞版的结果是一致的

  2. 如果没有元素,非阻塞版会直接返回 nil ,阻塞版会根据 timeout 来进行一段时间的阻塞,在此期间 redis 可以执行其他命令,但是对应被阻塞了的客户端还是会表示为阻塞状态

  3. 命令中如果设置了多个键,那么会从左向右遍历,一旦对应上就会弹出元素,并立即返回

  4. 如果多个客户端同时对一个键执行 pop ,那么只有最先执行的客户端可以得到弹出的元素

命令

BLPOP

LPOP的阻塞版

blpop key {key……} timeout

时间复杂度: O(1)

返回值: 取出的元素 或者 nil

BRPOP

RPOP的阻塞版

brpop key {key……} timeout

时间复杂度: O(1)

返回值: 取出的元素 或者 nil

命令总结

操作

命令

时间复杂度

添加

rpush key value [value ...]

O(k),k 是插入的元素个数

lpush key value [value ...]

O(k),k 是插入的元素个数

linsert key before|after pivot value

O(n),n 是 pivot 距离头或尾的偏移量

查找

lrange key start end

O(s + n),s 是 start 偏移量,n 是范围长度

lindex key index

O(n),n 是索引的偏移量

llen key

O(1)

删除

lpop key

O(1)

rpop key

O(1)

lrem key count value

O(k),k 是列表元素个数(需遍历)

ltrim key start end

O(k),k 是需保留的元素个数

修改

lset key index value

O(n),n 是索引的偏移量

阻塞版

blpop key [key ...] timeout

O(1)

brpop key [key ...] timeout

O(1)

内部编码

  • 当元素个数比较小同时没有较大元素时,是 ziplist

  • 但是有时会显示为 quicklist (redis 的默认链表实现)

  • 当元素个数超过 512 时,是 linkedlist

  • 当某个元素长度超过 64 字节时,是 linkedlist


网站公告

今日签到

点亮在社区的每一天
去签到