zoukankan      html  css  js  c++  java
  • Redis 数据类型-List

    lpush/rpush/lrange

    127.0.0.1:6379> LPUSH list01 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> LRANGE list01 0 -1
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379> RPUSH list02 1 2 3 4 5
    (integer) 5
    127.0.0.1:6379> LRANGE list02 0 -1
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    5) "5"
    127.0.0.1:6379> 

    lpush 为先进后出,lpush相当于从左侧开始入栈

    rpush 为先进先出,rpush相当于从右侧开始入栈

    lrange list01 0 -1  其中范围(0 -1)为取所有数据,从栈顶开始取数据

    LPOP/RPOP 相当于弹栈,将数据弹出站

    127.0.0.1:6379> LRANGE list01 0 -1
    1) "5"
    2) "4"
    3) "3"
    127.0.0.1:6379> LPOP list01 弹出栈顶数据
    "5"
    127.0.0.1:6379> RPOP list01 弹出栈底数据
    "3"
    127.0.0.1:6379> LRANGE LIST01 0 -1
    (empty list or set)
    127.0.0.1:6379> LRANGE list01 0 -1
    1) "4"
    127.0.0.1:6379>

    LINDEX 按照索引下标获得元素(从上到下)

    127.0.0.1:6379> LRANGE list01 0 -1
    1) "4"
    2) "3"
    3) "2"
    127.0.0.1:6379> lindex list01 0
    "4"

    LLEN 获取长度

    127.0.0.1:6379> LLEN list01
    (integer) 3
    127.0.0.1:6379>

    LREM KEY 删除N个value

    127.0.0.1:6379> RPUSH list03 1 1 1 2 2 2 3 3 3 4 4 4 5
    (integer) 13
    127.0.0.1:6379> LREM list03 2 3(删除2个3)
    (integer) 2
    127.0.0.1:6379> LRANGE list03 0 -1
    1) "1"
    2) "1"
    3) "1"
    4) "2"
    5) "2"
    6) "2"
    7) "3"
    8) "4"
    9) "4"
    10) "4"
    11) "5"
    127.0.0.1:6379>

    ltrim key 开始index 结束index, 截取指定范围的值再赋值给key

    127.0.0.1:6379> LPUSH list01 1 2 3 4 5 6 7 8
    (integer) 8
    127.0.0.1:6379> LRANGE list01 0 -1
    1) "8"
    2) "7"
    3) "6"
    4) "5"
    5) "4"
    6) "3"
    7) "2"
    8) "1"
    127.0.0.1:6379> LTRIM list01 3 5 (截取下标为3-5的数值,下表从0开始,再赋值给list01)
    OK
    127.0.0.1:6379> LRANGE list01 0 -1
    1) "5"
    2) "4"
    3) "3"
    127.0.0.1:6379>

    RPOPLPUSH 源列表 目的列表 (将一个数据弹出,使用rpop弹出的底部数据,lpush放入另一个中)

    127.0.0.1:6379> lrange list02 0 -1
    1) "2"
    2) "3"
    3) "4"
    127.0.0.1:6379> lrange list01 0 -1
    1) "8"
    2) "7"
    3) "6"
    4) "5"
    5) "4"
    6) "3"
    7) "2"
    8) "1"
    127.0.0.1:6379> RPOPLPUSH list01 list02
    "1"
    127.0.0.1:6379> LRANGE list02 0 -1
    1) "1"
    2) "2"
    3) "3"
    4) "4"
    127.0.0.1:6379>

    lset key index value 对index位置的进行赋值value

    127.0.0.1:6379> LRANGE list01 0 -1
    1) "8"
    2) "7"
    3) "6"
    4) "5"
    5) "4"
    6) "3"
    127.0.0.1:6379> LSET list01 1 x
    OK
    127.0.0.1:6379> LRANGE list01 0 -1
    1) "8"
    2) "x"
    3) "6"
    4) "5"
    5) "4"
    6) "3"
    127.0.0.1:6379>

    linsert key before/after 值1 值2(在指定值 前/后 插入一个值)

    127.0.0.1:6379> LRANGE list01 0 -1
    1) "8"
    2) "x"
    3) "6"
    4) "5"
    5) "4"
    6) "3"
    127.0.0.1:6379> LINSERT list01 before x java
    (integer) 7
    127.0.0.1:6379> LRANGE list01 0 -1
    1) "8"
    2) "java"
    3) "x"
    4) "6"
    5) "5"
    6) "4"
    7) "3"
    127.0.0.1:6379> LINSERT list01 before x x
    (integer) 8
    127.0.0.1:6379> LRANGE list01 0 -1
    1) "8"
    2) "java"
    3) "x"
    4) "x"
    5) "6"
    6) "5"
    7) "4"
    8) "3"
    127.0.0.1:6379> LINSERT list01 before x java(如果指定值有重复,则找到的是第一个)
    (integer) 9
    127.0.0.1:6379> LRANGE list01 0 -1
    1) "8"
    2) "java"
    3) "java"
    4) "x"
    5) "x"
    6) "6"
    7) "5"
    8) "4"
    9) "3"
    127.0.0.1:6379>

    性能总结:

    它是一个字符串链表,left、right都可以插入添加;

    如果键不存在,创建新的链表;

    如果键已存在,新增内容;

    如果值全部移除,对应的键也就消失了。

    链表的操作无论是头部和尾部效率都极高,但假如是对中间元素进行操作,效率就很惨淡了。

  • 相关阅读:
    VBA 如何检测一个中文字符串是否包含在另一个字符串中
    RFC2119 规范内容
    Android 解读Event和Main Log
    为知笔记发布博客地址
    理解 Android Build 系统
    皮肤病
    关于Android中50M+的文本入库处理细节
    at java.lang.AbstractStringBuilder.toString
    java.lang.AbstractStringBuilder.enlargeBuffer
    关于手机定位轨迹的算法逻辑
  • 原文地址:https://www.cnblogs.com/wq3435/p/6079703.html
Copyright © 2011-2022 走看看