当前位置: 首页 > 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.dtcms.com/a/349877.html

相关文章:

  • 自然语言处理——07 BERT、ELMO、GTP系列模型
  • lesson46-1:Linux 常用指令全解析:从基础操作到高效应用
  • Docker:常用命令、以及设置别名
  • 数据挖掘 6.1 其他降维方法(不是很重要)
  • 聊聊负载均衡架构
  • 关于窗口关闭释放内存,主窗口下的子窗口关闭释放不用等到主窗口关闭>setAttribute(Qt::WA_DeleteOnClose);而且无需手动释放
  • 【Python】QT(PySide2、PyQt5):列表视图、模型、自定义委托
  • 【芯片后端设计的灵魂:Placement的作用与重要性】
  • SQL 语句拼接在 C 语言中的实现与安全性分析
  • 跨语言统一语义真理及其对NLP深层分析影响
  • 2.3零基础玩转uni-app轮播图:从入门到精通 (咸虾米总结)
  • Python 实战:内网渗透中的信息收集自动化脚本(3)
  • 苹果公司即将启动一项为期三年的计划
  • Linux应急响应一般思路(三)
  • 蜗牛播放器 Android TV:解决大屏观影痛点的利器
  • C/C++ 指针与函数
  • Tesseract OCR之页面布局分析
  • 朴素贝叶斯:用 “概率思维” 解决分类问题的经典算法
  • ​Visual Studio + UE5 进行游戏开发的常见故障问题解决
  • 【区间DP】P1063 [NOIP 2006 提高组] 能量项链
  • 基于深度学习的人声分离系统设计与实现
  • Apache Commons Math_Java科学计算的利器
  • AP服务发现中两条重启检测路径
  • 南京魔数团:AR技术引领远程协作新纪元
  • C++ Core Guidelines 核心理念
  • ios webgl音频问题
  • 深入解析:为什么应该避免使用 atoi、atol 和 atof 函数
  • 集成算法概述与分类
  • 大数据毕业设计选题推荐-基于大数据的超市销售数据统计分析系统-Hadoop-Spark-数据可视化-BigData
  • 【opengl 实践】 windows下vscode配置遇到的问题