zoukankan      html  css  js  c++  java
  • redis 数据类型为list命令整理以及示例

    常用来制作队列,当然lpush+rpop也能做栈

    #将RPUSH RPUSHX LPUSH LPUSHX一并介绍(具体介绍RPUSH和RPUSHX,因为其实就是插入的方向的区别)

    RPUSH key value [value ...]

    向存于 key 的列表的尾部插入所有指定的值。如果 key 不存在,那么会创建一个空的列表然后再进行 push 操作。 当 key 保存的不是一个列表,那么会返回一个错误。

    可以使用一个命令把多个元素打入队列,只需要在命令后面指定多个参数。元素是从左到右一个接一个从列表尾部插入。 比如命令 RPUSH mylist a b c 会返回一个列表,其第一个元素是 a ,第二个元素是 b ,第三个元素是 c

    #情况1 key不是列表
    
    127.0.0.1:6379> set list2 test
    OK
    127.0.0.1:6379> RPUSH list2 1 2 3
    (error) WRONGTYPE Operation against a key holding the wrong kind of value
    
    #情况2 正常情况
    
    127.0.0.1:6379> RPUSH list1 1 2 3
    (integer) 3
    
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "1"
    2) "2"
    3) "3"

    RPUSHX key value

    将值 value 插入到列表 key 的表尾, 当且仅当 key 存在并且是一个列表。 和 RPUSH 命令相反, 当 key 不存在时,RPUSHX 命令什么也不做。

    #情况1 正常情况list存在以刚刚的list1举例
    
    127.0.0.1:6379> RPUSHX list1 4
    (integer) 4
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    
    #情况2 list不存在,不操作直接返回0
    
    127.0.0.1:6379> RPUSHX list3 4
    (integer) 0

    #pop指令。将RPOP LPOP一并介绍(具体介绍RPOP,因为其实就是弹出的方向的区别)

    RPOP key

    移除并返回存于 key 的 list 的最后一个元素。

    #情况1list不存在的情况
    
    127.0.0.1:6379> RPOP list3
    (nil)
    
    #情况2 非list
    
    127.0.0.1:6379> get list2
    "test"
    
    127.0.0.1:6379> RPOP list2
    (error) WRONGTYPE Operation against a key holding the wrong kind of value
    
    #情况3 正常情况
    
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    127.0.0.1:6379> RPOP list1
    "4"
    
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "1"
    2) "2"
    3) "3"
    
    #情况4 当list为空的情况
    
    127.0.0.1:6379> RPOP list
    (nil)

    #如果想修改某个位置的值 lset

    LSET key index value

    设置 index 位置的list元素的值为 value。

    当index超出范围时会返回一个error。

    127.0.0.1:6379> LRANGE list1 0 -1
    1) "1"
    2) "2"
    3) "3"
    127.0.0.1:6379> LSET list1 0 0
    OK
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "0"
    2) "2"
    3) "3"

    #如果想截断保留list部分空间使用ltrim

    LTRIM key start stop

    修剪(trim)一个已存在的 list,这样 list 就会只包含指定范围的指定元素。start 和 stop 都是由0开始计数的, 这里的 0 是列表里的第一个元素(表头),1 是第二个元素,以此类推。

    LTRIM 的一个常见用法是和 LPUSH / RPUSH 一起使用。此场景可用来纪录日志,类似环形队列。以为空间是定长 例如:

    • LPUSH mylist someelement
    • LTRIM mylist 0 99
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "0"
    2) "2"
    3) "3"
    127.0.0.1:6379> LTRIM list1 0 1
    OK
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "0"
    2) "2"
    

    #如果想在某个list值前后加值可以使用linsert

    LINSERT key BEFORE|AFTER pivot value

    把 value 插入存于 key 的列表中在基准值 pivot 的前面或后面。

    当 key 不存在时,这个list会被看作是空list,任何操作都不会发生。

    当 key 存在,但保存的不是一个list的时候,会返回error。

    #下面例子是在2后插入3在2前插入1.

    127.0.0.1:6379> LRANGE list1 0 -1
    1) "0"
    2) "2"
    127.0.0.1:6379> LINSERT list1 AFTER 2 3
    (integer) 3
    127.0.0.1:6379> LINSERT list1 BEFORE 2 1
    (integer) 4
    
    127.0.0.1:6379> LRANGE list1 0 -1
    1) "0"
    2) "1"
    3) "2"
    4) "3"
  • 相关阅读:
    C连载20-转换说明中的异常
    Android连载30-SharedPreference存储
    搭建一个开源项目12-Kubernetes集群部署(下)以及elasticsearch部署
    JavaScript连载29-元素类型获取、节点CD
    从零开始学VUE之模板语法(计算属性)
    从零开始学VUE之模板语法(绑定属性)
    从零开始学VUE之模板语法(插值操作)
    从零开始学VUE之Vue的生命周期
    从零开始学VUE之Vue创建时可以传入的Option属性
    从零开始学VUE之Vuejs初体验(DEMO)
  • 原文地址:https://www.cnblogs.com/gavinjunftd/p/8506885.html
Copyright © 2011-2022 走看看