zoukankan      html  css  js  c++  java
  • redis的list类型

    1、简单介绍

       redis的list类型其实就是一个每个元素都是string类型的双向链表。所以lpush、rpush、lpop和rpop命令的时间复杂度是O(1),list会记录链表的长度,所以llen操作也是O(1)的时间复杂度。链表的最大长度是2的32次方减1,。list类型可以用作队列或者栈。list还有阻塞版本,就是说如果队列为空,就会等待直到超时或者有数据放入队列。阻塞版本的好处是避免轮询,当有数据时,工作线程可以马上返回,避免轮询带来的延时。

    2、相关命令

    1)lpush命令:加入一个元素到左边的头部

    2)rpush命令:加入一个元素到右边的底部

    【注意】为了避免头部底部混乱,这里统一把左边的认为是头部,右边是底部,下面也是按照这样的做法。

    3)lpop命令:从左边头部取出第一个元素

    4)rpop命令:从右边底部取出第一个元素

    5)lrange命令:从左边开始列出list的元素

    6)llen命令:获取list的长度。

    【注意】头部也就是左边的第一个元素下标为0,而底部也就是右边的第一个元素的下标为-1

     

    7)ltrim命令:截取队列,保留一部分,即保留两个下标之间的数据

     

     【注意】lpush和rpush可以添加多个元素,pop操作只允许取一个元素

     8)lrem命令:删除count个值为value的元素

    9)blpop命令:阻塞模式下从队list头部(左边)获取元素,如果队列为空或者不存在,则会等待timout然后返回空值或者等到了有操作push数据到队列。

    【注意】blpop命令可以读取多个list,比如blpop list1 list2 list3 ,如果list1存在且不为空,则从list1上读取一个元素马上就返回了。如果list1不存在或者为空,则去list2获取,如果list2获取不到就去list3如此循环,直到能获取到元素,或者list1-list3全不存在或全是空,此情况下会阻塞等待timeout时间。如果在此时间内,有操作push数据到某一个list。那么之前阻塞在这个队列上的第一个clinet会获取到数据并马上返回。

    10)brpop命令与blpop命令相似,不同处是取数据是从底部取。

    11)rpoplpush命令:从第一个list的底部取出一个元素,加入到第二个list的头部。整个操作是原子的。

    3、小结

    1)注意下标问题:从做到右,左边下标是从0开始,右边到左边的下标是从-1、-2、-3这样到左边。

  • 相关阅读:
    Java核心技术 卷一 笔记四 库类的直接使用
    Java核心技术 卷一 笔记三 大数值及数组
    Java核心技术 卷一 笔记2 字符串的复制
    Java核心技术 卷一 笔记1
    修改css 样式后, hover事件 不生效
    修改 element ui input 输入框 样式不生效问题
    css3 计算属性
    Vue3 改动系列
    浏览器实现,向下滑动 鼠标滚轮,页面横向移动
    linux ceont0s7 vue 打包压缩图片 一直报错
  • 原文地址:https://www.cnblogs.com/guangye/p/7440923.html
Copyright © 2011-2022 走看看