• redis list使用


    list是个列表,是有序的。

    1、lpush:从列表左侧插入数据,如果列表不存在,则会新建

    语法:lpush key element [element . . .]

    如lpush li 0 1 2,会从左侧先插入0,再插入1,再插入2。

    相近命令:lpushx、rpush、rpushx

    lpushx:只在列表存在时,才从列表左侧插入数据,否则,do nothing。

    语法:lpush key element [element . . .]

    如lpushx lisa 0 1 2,如果exists lisa返回1,且type lisa返回"list",则会从lisa左侧依次插入0、1、2,否则不做任何操作。

    rpush:从列表右侧插入数据

    如rpush li 3 4 5,会从右侧先插入2,再插入4,再插入5。此时li中元素从左侧依次是"2"、"1"、"0"、"3"、"4"、"5"。

    rpushx:只在列表存在时,才从列表右侧插入数据,否则,do nothing。

    如rpushx lisa 1 2 3,如果exists lisa返回1,且type lisa返回"list",则会从lisa右侧依次插入1、2、3,否则不做任何操作。

    2、lrange:从左侧查看数据

    语法:lrange key start stop,start、stop是索引,从0开始,-1表示结尾

    如lrange li 0 2,从左侧查看索引在[0, 2]之间的元素,依次返回"2"、"1"、"0"。

    lrange li 0 -1,从左侧查看所有元素,依次返回"2"、"1"、"0"、"3"、"4"、"5"。

    3、llen:查看列表元素个数

    语法:llen key

    如llen li,返回4

    4、lrem:从列表中删除指定值的元素。

    语法:lrem key count element,count是删除几个,因为列表中元素值是可以相同的,所以依据值删除时,可以删除不止一个。

    count>0时,表示从左侧依次删除多少个指定值的元素;count<0时,表示从右侧依次删除多少个指定值的元素;count=0时,表示把指定值的元素全部删除。

    如lrem lisa 1 3,从lisa列表左侧开始,删除一个值为2的元素。

    假如有一个表示英语成绩的列表eng_scores,lpush eng_scores 0 10 20 0 20 10 20 10 0

    执行lrange eng_scores 0 -1,结果如下:

    127.0.0.1:6379> lrange eng_scores 0 -1
    1) "0"
    2) "10"
    3) "20"
    4) "10"
    5) "20"
    6) "0"
    7) "20"
    8) "10"
    9) "0"

    执行lrem eng_scores 2 10,从左侧删除两个值为10的元素,会删除索引为0和8的元素,执行lrange eng_scores 0 -1,结果如下:

    127.0.0.1:6379> lrange eng_scores 0 -1
    1) "0"
    2) "20"
    3) "20"
    4) "0"
    5) "20"
    6) "10"
    7) "0"

    执行lrem eng_scores -2 20,从右侧删除两个值为20的元素,会删除索引为9和7的元素,执行lrange eng_scores 0 -1,结果如下:

    127.0.0.1:6379> lrange eng_scores 0 -1
    1) "0"
    2) "20"
    3) "0"
    4) "10"
    5) "0"

    执行lrem eng_scores 0 0,删除值为0的元素,会删除索引为3和9的元素,执行lrange eng_scores 0 -1,结果如下:

    127.0.0.1:6379> lrange eng_scores 0 -1
    1) "20"
    2) "10"

    5、lpop:从列表左侧弹出指定个数的元素并返回

    语法:lpop key [count]

    用lpop操作未用lrem操作过的eng_scores,

    如lpop eng_scores,从左侧弹出一个元素并返回。

    lpop eng_scores 2,从左侧弹出两个元素并返回。

    相近命令:rpop、rpoplpush、blpop、brpop、brpoplpush

    rpop:从列表右侧弹出指定个数的元素并返回

    语法:rpop key [count]

    rpoplpush:从一个列表的右侧弹出元素,并把此元素从左侧插入到另一个列表中

    语法:rpoplpush source destination

    如rpoplpush eng_scores math_scores,会把eng_scores最右侧的一个元素插入到math_scores的最左侧,一次只能操作一个元素,不能操作多个元素。

    blpop、brpop、brpoplpush分别是lpop、rpop、rpoplpush的阻塞版本,b代表block,把列表当阻塞队列使用。

    6、lmove:从一个列表的左侧或右侧弹出元素,并把此元素从左侧或右侧插入到另一个列表中。功能比rpoplpush更多。

    语法:lmove source destination left | right left | right

    如lmove eng_scores his_scores left left,会把eng_scores最左侧的一个元素插入到math_scores的最左侧,同样一次只能操作一个元素,不能操作多个元素。

    相近命令:blmove,是lmove的阻塞版本。

    7、lindex:查看列表指定索引处的元素

    语法:lindex key index,index从0开始

    如lindex eng_scores 0

    8、linsert:从列表左侧开始,在第一个指定元素的前面或者后面插入一个元素

    语法:linsert key before | after pivot element

    如linsert eng_scores before 10 20,从eng_scores列表左侧开始,在第一个值为10的元素前面添加一个20。

    9、lset:设置某索引的值

    语法:lset key index element

    假如eng_scores从左到右元素依次是"99"、"20"、"88"、"0"、"20"

    如:lset eng_scores 1 10,即设置索引为1处的元素值为10,则eng_scores从左到右元素依次会变为"99"、"10"、"88"、"0"、"20"

    如果设置的index不存在,那么会报数组越界。

    10、lpos:查询指定元素的索引。pos是position的简写

    语法:lpos key element [RANK rank] [COUNT num-matches] [MAXLEN len]

    假如eng_scores从左到右元素依次是"99"、"20"、"88"、"0"、"20"、"20"

    lpos eng_scores 20,会返回1,即不加任何多余选项的话,会返回从左侧开始第一个匹配的元素的索引。

    lpos eng_scores 20 rank 2,会返回4。rank从1开始,表示第一个匹配的,2表示第二个匹配的。。。

    lpos eng_scores 20 rank -1,会返回5。rank -1表示找列表最右边的一个匹配的元素的索引。

    lpos eng_scores 20 rank 1 count 2,会返回1、4。count 2表示匹配两个元素,rank 1 count 2表示从第一个匹配开始,匹配两个。

    lpos eng_scores 20 rank 1 count 2 maxlen 5,会返回???

    11、ltrim:仅保留指定索引区间的元素

    语法:ltrim key start stop

    假如eng_scores从左到右元素依次是"99"、"20"、"88"、"0"、"20"

    如ltrim eng_scores 0 2,这时候执行range eng_scores 0 -1,会发现eng_scores列表从左到右的元素依次是"99"、"20"、"88"。

    操作list的命令没有一个兼具设置过期时间的功能。

  • 相关阅读:
    RocketMQ:(2) Broker
    RocketMQ:(1) NameServer、Producer
    数据脱敏:姓名、电话号码等进行字段脱敏,中间部分显示成**
    hibernate中sql查询 字段如何与属性映射
    Java代码编写、代码优化技巧总结
    成长中,感恩遇到的人(1)
    代码中如何优化过多的if..else
    Unsatisfied dependency expressed through field 'rabbitTemplate'错误总结
    解决文件过大,上传失败的问题——大文件分割分片上传
    js 小数运算出现误差的原因
  • 原文地址:https://www.cnblogs.com/koushr/p/5873420.html
Copyright © 2020-2023  润新知