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

Redis类型之List

 1.介绍List

        列表(List)相当于数组或者顺序表,但是list的内部编码方式并非是一个简单的数组,而是更接近于“双端队列”(deque)

        列表中的元素是有序的,这里的有序并不是指升序或者降序,而是列表 a b c 不等价于列表 a c b的有序。因为List的头和尾都能高效的插入删除元素,就可以将List当作一个栈/队列来使用,且redis的一个典型应用场景作为消息队列使用,就是通过List类型来实现的。

2.List的常用操作

2.1 lpush和rpush

        lpush:向指定的key中头插元素,如果key不存在那么就会创建key

        rpush:向指定的key中尾插元素

        这两个指令的时间复杂度都是O(1),并且返回值是list的长度

        如果操作的key已经存在并且value的类型并不是list,此时lpush和rpush将会报错

2.2 lrange

        lrange:用于查看list中指定范围的元素

LRANGE key start stop      //这里的区间是闭区间

        

        在redis中如果下标越界,它的做法并不是像C++一样程序直接崩溃或得到一个不合法的数据或得到一个看似合法的数据,但是redis的做法是尽可能多的获取对应的数据。

2.3 lpushx

        lpushx:当key存在时才进行头插

        

2.4 rpop和lpop

        rpop和lpop:顾名思义就是头删和尾删,注意在redis6.2版本以前并没有count参数描述一次和删除几个元素

        这里就可以发现redis中的list搭配rpush和lpop就相当于队列了,搭配rpush和rpop使用就相当于栈了。

2.5 linsert

        linsert:根据基准值,找到对应的位置,从左往右找,找到第一个符合基准值的位置,然后根据选择的参数在找到的位置前或者后进行插入。返回值是插入之后,得到的新的list的长度。

        注意这里的基准值并不是位置(pos),而是一个值

LINSERT key <BEFORE | AFTER> pivot element     // BEFORE代表前 AFTER代表后

2.6 lindex

        lindex:给定下标,获取对应位置的元素,如果给的是非法的下标那么会返回nil

2.7 llen

        llen:获取对应的list的长度

2.8 lrem

        lrem:删除count个element,如果count为负值那么会从右往左开始删,为正值就会从右往左开始删,如果count为0就会删除所有的element

LREM key count element

2.9 ltrim

        ltrim:保留start和stop之间区间的元素(区间外的元素直接删除)

LTRIM key start stop

2.10 lset

        lset:根据下标修改元素,如果下标越界直接返回nil

2.11 brpop 和 blpop

        blpop相对于lpop的区别在于如果list为空,blpop就会产生阻塞,一直阻塞到队列不为空为止,如果队列不为空则行为完全一致

        我这里先起来一个终端来运行blpop key3 1000。

        再开一个窗口进行插入数据,这个时候就会发现第一个窗口返回了。返回的信息有从哪个key中弹出的数据,这个数据是什么,以及等待的时间。

3.常用操作小节

http://www.xdnf.cn/news/1364761.html

相关文章:

  • 【慕伏白】CTFHub 技能树学习笔记 -- Web 之信息泄露
  • vue3+typescript:为表格生成唯一的Key/No
  • 集群与集群概念
  • 如何在 Jenkins 中安装 Master 和 Slave 节点以优化 CI/CD 流程
  • 【数据可视化-98】2025年上半年地方财政收入Top 20城市可视化分析:Python + Pyecharts打造炫酷暗黑主题大屏
  • 【数据可视化-100】使用 Pyecharts 绘制人口迁徙图:步骤与数据组织形式
  • Linux下的软件编程——网络编程(http)
  • 基于git的场景解决
  • DeepSeek 14B模型本地部署与预训练实现方案
  • 从零开始学习单片机15
  • MySQL常见报错分析及解决方案总结(1)---Can‘t connect to MySQL server on ‘localhost‘(10061)
  • 什么是事件循环(Event Loop)?浏览器和 Node.js 中的事件循环有什么区别?
  • 维度建模 —— 雪花模型 和 星型模型的优缺点
  • 冯·诺依曼架构:现代计算机的基石与瓶颈
  • Linux驱动开发笔记(七)——并发与竞争(下)——自旋锁信号量互斥体
  • k8s笔记03-常用操作命令
  • vite 项目创建、插件配置
  • JBL音响代理——河北正娱科技的声学精品工程
  • 智慧城市SaaS平台/交通设施运行监测系统之桥梁运行监测、城市道路塌陷风险运行监测系统架构内容
  • 网络编程--TCP/UDP Socket套接字
  • 验证码流程
  • 【AI解读源码系列】ant design mobile——Space间距
  • 京东API分类接口实战指南:获取各类商品信息
  • 【大模型本地运行与部署框架】Ollama的API交互
  • Spring拦截器中@Resource注入为null的问题
  • PAT乙级_1120 买地攻略_Python_AC解法_含疑难点
  • 6.3Element UI 的表单
  • 【python断言插件responses_validator使用】
  • 分布式系统与单机系统的优劣势对比
  • Reachability Query