当前位置: 首页 > news >正文

Redis-list类型

这里只是介绍命令使用

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

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

列表特点:

  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

相关文章:

  • Spring常见问题复习
  • Web前端页面搭建
  • python logging模块
  • ACM代码模式笔记
  • 学透Spring Boot — 011. 一篇文章学会Spring Test
  • 操作系统——2.4 (管程与死锁的基本概念)
  • 第六章:分布式共识_《凤凰架构:构建可靠的大型分布式系统》
  • 解码 __iter__ 和 itertools.islice - 迭代的艺术
  • 数据结构(5)——栈
  • 【Python爬虫高级技巧】BeautifulSoup高级教程:数据抓取、性能调优、反爬策略,全方位提升爬虫技能!
  • cpp自学 day19(多态)
  • 一周学会Pandas2 Python数据处理与分析-NumPy数据类型
  • 【JavaWeb-Spring boot】学习笔记
  • 通过枚举、AOP、注解、反射填充公共字段
  • MySQL的进阶语法8(SQL优化——insert、主键、order by、group by、limit、count和update)
  • k8s pod security context 总结笔记
  • 自旋锁(C++实现)
  • js中一些便捷用法
  • 记一次表格数据排序优化(一)--排序30000条数据有多卡
  • MySQL基础 [一] - Ubuntu版本安装