zoukankan      html  css  js  c++  java
  • redis_list

    list

    • 特点:
      • 1:列表中的元素是有序的,可以通过下标获取某个元素值[下标从0开始
      • 2:列表中的元素是可以重复的

    • 列表的五种操作类型

    • 1:添加操作

      • 从右边插入元素 rpush key value [value ...]

        127.0.0.1:6379> rpush  listkey c b a 
        (integer) 3
        127.0.0.1:6379> lrange listkey 0 -1    #从左到右获取列表的所有元素
        1) "c"
        2) "b"
        3) "a"
        #O(k),k是元素的个数
        
      • 从左边插入元素 lpush key value [value ...] #O(k),k是元素的个数

      • 向某个元素前或者后 --插入元素 linsert key before|after pivot value

      • linsert命令会从列表中找到等于pivot的元素,在其前|后插入元素 --返回当前列表的长度

        127.0.0.1:6379> linsert listkey before b java     #在listkey列表中的元素b前面插入java元素
        (integer) 4
        127.0.0.1:6379> lrange listkey 0 -1
        1) "c"
        2) "java"
        3) "b"
        4) "a"
        
        # O(n),n是元素prvot距离列表头或尾部的距离
        
    • 2:删除

      • 从列表左侧弹出元素 lpop key

        127.0.0.1:6379> lrange listkey 0 -1
        1) "c"
        2) "java"
        3) "b"
        4) "a"
        127.0.0.1:6379> lpop listkey
        "c"
        
      • 从列表右侧弹出元素 rpop key

      • 删除指定元素 lrem key count value

        • count>0:从左到右,删除最多count个元素
        • count<0:从右到左,删除最多count 绝对值个元素
        • count=0:删除所有
        127.0.0.1:6379> lrange listkey 0 -1
        1) "a"
        2) "a"
        3) "a"
        4) "a"
        5) "a"
        6) "java"
        7) "b"
        8) "a"
        127.0.0.1:6379> lrem listkey 4 a     #从左边开始删除4个为a的元素
        (integer) 4
        127.0.0.1:6379> lrange listkey 0 -1
        1) "a"
        2) "java"
        3) "b"
        4) "a"
        
        #  O(n),n是列表长度
        
      • 按照索引范围保存[修剪]元素 ltrim key start end

        127.0.0.1:6379> lrange listkey 0 -1
        1) "a"
        2) "java"
        3) "b"
        4) "a"
        127.0.0.1:6379> ltrim listkey 1 3 
        OK
        127.0.0.1:6379> lrange listkey 0 -1
        1) "java"
        2) "b"
        3) "a"
        
        #O(n),n是要裁剪的元素总数
        
    • 3:修改

      • 修改指定索引下标的元素 lset key index newvalue

        127.0.0.1:6379> lrange listkey 0 -1
        1) "java"
        2) "b"
        3) "a"
        127.0.0.1:6379> lset listkey 2 python
        OK
        127.0.0.1:6379> lrange listkey 0 -1
        1) "java"
        2) "b"
        3) "python"
        
        #O(n)是索引的偏移量
        
    • 4:查找

      • 获取列表指定索引范围所有的元素 lrange key start end

        • 下标从左到右 0到N-1 ,从右到左是 -1 到 -N
        • start和end都包括,双闭区间-----和大多数编程语言不一样
        127.0.0.1:6379> lrange listkey 0 -1
        1) "java"
        2) "b"
        3) "a"
        
        #O(s+n):s是start的偏移量,n是start到end的范围
        
      • 获取列表指定索引下标的元素 lindex key index

        127.0.0.1:6379> lindex listkey -1
        "python"
        
      • 获取列表的长度 llen

        127.0.0.1:6379> llen listkey
        (integer) 3
        
    • 5 阻塞操作

      • blpop key [key....] timeout秒

      • brpop key [key ...] timeout

      • 1:列表为空
        127.0.0.1:6379> rpush list:test a  b c  d  #添加
        (integer) 4
        127.0.0.1:6379> lpop list:test
        "a"
        127.0.0.1:6379> lpop list:test
        "b"
        127.0.0.1:6379> lpop list:test
        "c"
        127.0.0.1:6379> lpop list:test
        "d"
        127.0.0.1:6379> lpop list:test    #依次弹出,直到为空
        (nil)
        127.0.0.1:6379> blpop list:test  3   #timeout=3.3秒后返回
        (nil)
        (3.09s)
        
        127.0.0.1:6379> blpop list:test  0  #timeout =0,一直阻塞等待下去
        
        
      • 2:列表不为空
        127.0.0.1:6379> lrange list:test 0 -1
        1) "b"
        2) "a"
        127.0.0.1:6379> blpop list:test 3    #列表不为空,则立即返回
        1) "list:test"
        2) "b"
        
    • 应用口诀:

    • lpush + lpop = Stack[栈]

    • lpush +rpop = Queue[队列]

    • lpush + ltrim = Capped Collection(有限集合)

    • lpush +brpop ==Message Queue(消息队列)

  • 相关阅读:
    浅析影响一个网站的因素
    23种常用设计模式的UML类图
    各版本IE兼容问题,IE6,IE7,IE8,IE9,IE10,IE11
    47种常见的浏览器兼容性问题大汇总
    5个Sublime Text 的插件推荐
    网页设计师神器,快速生成网站配色、字型等风格的工具——Stylify Me
    免费的高分辨率图库——re:splashed 可用做网页背景、设计或桌面壁纸
    MySQL(18):Select- subquery子查询
    MySQL(17):Select-union(联合查询)使用注意事项
    MySQL(16):Select-union(联合查询)
  • 原文地址:https://www.cnblogs.com/zhoujun007/p/13131641.html
Copyright © 2011-2022 走看看