Redis数据结构-列表

简介
  • 一个列表可以包含一个或以上数量的 项(item),每个项按照它们被推入到列表的位置来排列
  • 列表包含的项可以出现重复,它们不必是唯一的
  • 以有序的方式存储多个可重复的只,功能相当于Java中的队列操作
列表操作
  • LPUSH key value [value …]
    将一个或以上数量的值依次推入到列表的左端,命令返回新值被推入之后,列表目前包含的项数量

    127.0.0.1:6379> lpush list 1 2 3
    (integer) 3
    复制代码
  • LPOP key
    移除并返回列表最右端的项

    127.0.0.1:6379> lpop list
    "3"
    127.0.0.1:6379> lpop list
    "2"
    复制代码
  • RPUSH key value [value …]
    将一个或以上数量的值依次推入到列表的右端,命令返回新 值被推入之后,列表目前包含的 项数量

    127.0.0.1:6379> rpush list 4 5 6
    (integer) 6
    复制代码
  • RPOP key
    移除并返回列表最左端的项

    127.0.0.1:6379> rpop list
    "6"
    127.0.0.1:6379> rpop list
    "5"
    127.0.0.1:6379> rpop list
    "4"
    127.0.0.1:6379> rpop list
    "1"
    复制代码
  • LLEN key
    返回列表键 key 的长度,也即是,返回列表包含的列表项数量

    127.0.0.1:6379> llen list
    (integer) 0
    127.0.0.1:6379> lpush list 1 2 3 4 5 6
    (integer) 6
    复制代码
  • LINDEX key index
    返回列表键 key 中,指定索引 index 上的列表项,不会删除列表上原有的值,index索引可以是正数或者负数

    27.0.0.1:6379> lindex list 2
    "4"
    127.0.0.1:6379> llen list
    (integer) 6
    复制代码
  • LRANGE key start stop
    返回列表键 key 中,从索引 start 至索引 stop 范围内的所有列表项,不会删除列表上原有的值,两个索引参数都可以是正数或者

负数
127.0.0.1:6379> lrange list 1 5 1) "5" 2) "4" 3) "3" 4) "2" 5) "1" 127.0.0.1:6379> llen list (integer) 6

插入和删除操作
  • LSET key index value
    将列表键 key 索引index 上的列表项设置为value ,设置成功时命令返回 OK
    如果 index 参数超过了列表的索引范围,那么命令返回一个错误

    127.0.0.1:6379> lrange  list 1 5
    1) "5"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    127.0.0.1:6379> lset list 1 5x
    OK
    127.0.0.1:6379> lset list 100 5x
    (error) ERR index out of range
    127.0.0.1:6379> lrange  list 1 5
    1) "5x"
    2) "4"
    3) "3"
    4) "2"
    5) "1"
    	```
    
    复制代码
  • LINSERT key BEFORE|AFTER pivot value
    根据命令调用时传递的是 BEFORE 选项还是 AFTER 选项,将值 value 插入到指定列表项 pivot 的之前或者之后。当 pivot 不存在于列表 key 时,不执行任何操作

    127.0.0.1:6379> linsert list  before 4 400
    (integer) 7
    127.0.0.1:6379> lrange  list 1 10
    1) "5x"
    2) "400"
    3) "4"
    4) "3"
    5) "2"
    6) "1"
    复制代码
  • LREM key count value
    根据参数 count 的值,移除列表中与参数value相等的列表项
     • 如果 count > 0 ,那么从表头开始向表尾搜索,移除最多count 个值为 value 的列表项
     • 如果 count < 0 ,那么从表尾开始向表头搜索,移除最多abs(count) 个值为 value 的列表项
     • 如果 count = 0 ,那么移除列表中所有值为 value 的列表项
    命令返回被移除列表项的数量,移除列表中与参数 value 相等的列表项

  • LTRIM key start stop
    对一个列表进行修剪(trim),让列表只保留指定索引范围内的列表项,而将不在范围内的其他列表项全部

删除。两个索引都可以是正数或者 负数,命令执行成功时返回 OK
127.0.0.1:6379> lrange list 1 6 1) "5x" 2) "400" 3) "4" 4) "3" 5) "2" 6) "1" 127.0.0.1:6379> ltrim list 1 3 OK 127.0.0.1:6379> lrange list 1 6 1) "400" 2) "4"

阻塞式弹出操作
  • BLPOP key [key …] timeout
    命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最左端的项
    如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止
    设置 timeout 参数为 0 表示永远阻塞

  • BRPOP key [key …] timeout
    命令会以从左到右的顺序,访问给定的各个列表,并弹出首个非空列表最右端的项
    如果所有给定列表都为空,那么客户端将被阻塞,直到等待超时,或者有可弹出的项出现为止
    设置 timeout 参数为 0 表示永远阻塞

    127.0.0.1:6379> blpop list 0
    1) "list"
    2) "9"
    (3.18s)
    复制代码
  • BLPOP/BRPOP 的先到先服务原则
    如果有多个客户端同时因为某个列表而被阻塞,那么当有新值被推入到这个列表时,服务器会按照先到

先服务(first in first service)原则,优先向最早被阻塞的客户端返回新值

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享