redis中设置获取值--列表

列表

一个列表可以包含一个或以上数量的 项(item),每个项按照它们被推入到列表的位置来排列。 每个列表项所处的位置决定了这个项的索引值(index),索引以 0 为开始,从列表的左端到右端依次 递 增,位于列表最左端(表 头)的项的索引为 0 ,而位于列表最右端(表尾)的 项的索引为 N-1 ,其中 N 为 列表的长度。 列表包含的项可以出现重复,它们不必是唯一的。

1,从列表左端推入值  lpush key "one" "two"  "three"   返回 列表当前项数量

     列表值现状:  "three"   "two"   "one" 

2,从列表右端推入值  rpush key "one" "two"  "three"   返回 列表当前项数量

     列表值现状:  "one" "two"  "three"

3,从列表左端弹出值 lpop key     弹出最左端的值,并返回被弹出的值

4,从列表右端弹出值 rpop key    弹出最右端的值,并返回被弹出的值

5,获取列表的长度   llen key

6,获取指定索引位置上的项  lindex key index

     rpush key "one" "two"  "three"    

     lindex key 1;---返回"two"

     lindex key -1;---返回"three"

7,获取指定索引内的值  lrange key start  stop

      "one" "two"  "three"     "four" "five"  "six"   

      lrange key 0  2;---返回 "one" "two"  "three" 

8,设置指定索引上的列表项 lset key index value

     "one" "two"  "three"     "four" "five"  "six"   

     lset key 1 "ten";  ---返回 OK   列表状态"one" "ten"  "three"     "four" "five"  "six"   

9,在指定位置插入列表项     linsert key before/after pivot value   返回当前列表长度

    "one" "two"  "three"     "four" "five"  "six"   

    linsert key before "three"  "night";  ---返回 7   列表状态"one" "two"  "night"  "three"     "four" "five"  "six"   

10,从列表中删除指定的值 lrem key count value  返回被移除列表项的数量

      根据count值,删除列表内的值  

      1)count > 0;索引从0开始,删除值是value的项,count个

      2)count == 0;删除值是value的所有项

      3)count < 0;索引从-1开始,删除值是value的项,abs(count)个

11,修剪列表  ltrim key start stop   ,只保留索引范围内的项,其他的删除。俩个索引都可以是整数或负数   返回 OK

12,阻塞弹出命令

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

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

 

 

BLPOP/BRPOP 的先到先服务原则 如果有多个客户端同时因为某个列表而被阻塞,那么当有新 值被推入到这个列表时,服务器会按照先到 先服务(first in first service)原则,优先向最早被阻塞的客户端返回新值。 举个例子,假设列表 lst 为空,那么当客户端 X 执行命令 BLPOP lst timeout 时,客户端 X 将被阻塞。 在此之后,客户端 Y 也执行命令 BLPOP lst timeout ,也因此被阻塞。 如果这时,客户端 Z 执行命令 RPUSH lst "hello" ,将值 "hello" 推入列表 lst ,那么这个 "hello" 将被返回 给客户端 X ,而不是客户端 Y ,因为客户端 X 的被阻塞时间要早于客户端 Y 的被阻塞时间。

posted @ 2021-12-01 20:17  昊昋  阅读(613)  评论(0)    收藏  举报