zoukankan      html  css  js  c++  java
  • Redis数据结构---列表

    列表(list) 类型是用来存储多个有序的字符串

    列表中的每个字符串称为元素(element) , 一个列表最多可以存储232-1个元素。

    列表是一种比较灵活的数据结构, 它可以充当栈和队列的角色, 在实际开发上有很多应用场景

    列表类型有两个特点:

    第一、 列表中的元素是有序的,这就意味着可以通过索引下标获取某个元素或者某个范围内的元素列表。
    第二、 列表中的元素可以是重复的

    命令

    添加
    从由插入
    rpush key value [value ...]
    从左插入
    lpush key value [value ...]
    向某个元素前或后插入
    linsert key before|after pivot value
    
    
    
    查找
    获取指定范围内的元素列表
    lrange key start end
    lrange操作会获取列表指定索引范围所有的元素。 索引下标有两个特点: 
    第一, 索引下标从左到右分别是0到N-1, 但是从右到左分别是-1到-N。
    第二, lrange中的end选项包含了自身
    
    获取列表指定索引下标的元素
    lindex key index
    获取列表长度
    llen key
    
    
    删除
    从列表左侧弹出元素
    lpop key
    从列表右侧弹出
    rpop key
    删除指定元素
    lrem key count value
    lrem命令会从列表中找到等于value的元素进行删除, 根据count的不同
    分为三种情况:
      ·count>0, 从左到右, 删除最多count个元素。
      ·count<0, 从右到左, 删除最多count绝对值个元素。
      ·count=0, 删除所有。
    
    按照索引范围修剪列表(只保留指定范围内从列表数据)
    ltrim key start end
    
    
    修改
    修改指定索引下标的元素
    lset key index newValue
    
    
    阻塞操作
    阻塞式弹出
    blpop key [key ...] timeout
    brpop key [key ...] timeout
    blpop和brpop是lpop和rpop的阻塞版本, 它们除了弹出方向不同, 使用方法基本相同, 所以下面以brpop命令进行说明, brpop命令包含两个参数:
      ·key [key...]: 多个列表的键。
      ·timeout: 阻塞时间(单位: 秒)。
    注:
    列表为空: 如果timeout=3, 那么客户端要等到3秒后返回, 如果timeout=0, 那么客户端一直阻塞等下去(如果此时向列表中插入数据,列表就有数据了,就会立刻返回)
    列表不为空: 如果timeout=0,客户端会立即返回

    列表相关命令时间复杂度

    内部编码

    列表类型的内部编码有两种。

    ·ziplist(压缩列表) : 当列表的元素个数小于list-max-ziplist-entries配置(默认512个) , 同时列表中每个元素的值都小于list-max-ziplist-value配置时(默认64字节) , Redis会选用ziplist来作为列表的内部实现来减少内存的使用。
    ·linkedlist(链表) : 当列表类型无法满足ziplist的条件时, Redis会使用linkedlist作为列表的内部实现。

    注:Redis3.2版本提供了quicklist内部编码, 简单地说它是以一个ziplist为节点的linkedlist, 它结合了ziplist和linkedlist两者的优势, 为列表类型提供了一种更为优秀的内部编码实现

    使用场景

    消息队列

    文章列表

    实际上列表的使用场景很多, 在选择时可以参考以下口诀:

    ·lpush+lpop=Stack( 栈)
    ·lpush+rpop=Queue( 队列)
    ·lpsh+ltrim=Capped Collection( 有限集合)
    ·lpush+brpop=Message Queue( 消息队列)
  • 相关阅读:
    16
    15
    14
    13
    12
    11
    10
    python包管理器修改镜像地址
    Linux环境下安装hadoop分布式集群+问题总结
    解剖css中的clear属性
  • 原文地址:https://www.cnblogs.com/MacoLee/p/13960053.html
Copyright © 2011-2022 走看看