redis list类型

redis 版本复制代码
代码如下:[root@localhost ~]#澳门金沙vip, redis-server –version Redis server
v=2.8.19 sha=00000000:0 malloc=jemalloc-3.6.0 bits=32
build=e2559761bd460ca0

Redis 的 list 类型其实正是叁个每种子成分都以 string
类型的双向链表。首要作用是 push、pop、获取八个限量的全部值等。list 的
pop 操作还应该有窒碍版本的,是为着幸免轮询。

list 是多少个链表构造,首要职能是 push、 pop、获取一个范围的兼具值 等,
操作

1 lpush

在 key 对应 list 的头顶加多字符串成分

127.0.0.1:6379> lpush list world

(integer) 1

127.0.0.1:6379> lpush list hello

(integer) 2

截取list

127.0.0.1:6379> lrange list 0 -1

1) “hello”

2) “world”

中 key 精通为链表的名字。Redis 的 list 类型其实便是贰个各类子元素都以string 类型的 双向链表。

2 rpush

在 key 对应 list 的尾巴部分增多字符串成分

127.0.0.1:6379> rpush list hello

(integer) 1

127.0.0.1:6379> rpush list world

(integer) 2

127.0.0.1:6379> lrange list 0 -1

1) “hello”

2) “world”

链表的最大尺寸是(2的 32 次方卡塔尔国。我们能够透过 push, pop
操作从链表的尾部或然后面部分加多删减成分。那使得 list
不仅能够用作栈,也得以用作队列。

3 linsert

在 key 对应 list 的特确定工作岗位位以前或之后添加字符串成分

127.0.0.1:6379> rpush list hello

(integer) 1

127.0.0.1:6379> rpush list world

(integer) 2

127.0.0.1:6379> linsert list before world one

(integer) 3

127.0.0.1:6379> lrange list 0 -1

1) “hello”

2) “one”

3) “world”

127.0.0.1:6379> linsert list after world two

(integer) 4

127.0.0.1:6379> lrange list 0 -1

1) “hello”

2) “one”

3) “world”

4) “two”

有趣的是 list 的 pop 操作还会有梗塞版本的,当我们[lr]pop 三个 list
对象时,假诺 list 是空,或许官样文章,会立时回去 nil。不过堵塞版本的
b[lr]pop 能够则足以卡住,当然能够加超时时间,超时后也会回来
nil。为何要窒碍版本的 pop
呢,首倘使为着幸免轮询。举个轻易的事比如若大家用 list
来兑现多少个行事行列。推行职分的 thread 能够调用拥塞版本的 pop
去获得任务那样就足以制止轮询去检查是还是不是有义务存在。当职务来时候专门的学业线程能够立时回到,也足以幸免轮询带来的推迟。

4 lset

设置 list 中钦命下标的成分值(下标从 0
起先卡塔尔下标为负表示从左侧初步(下标从-1方始)

127.0.0.1:6379> lrange list 0 -1

1) “hello”

2) “one”

3) “world”

4) “two”

127.0.0.1:6379> lset list 1 three

OK

127.0.0.1:6379> lrange list 0 -1

1) “hello”

2) “three”

3) “world”

4) “two”

① lpush 方法

5 lrem

从 key 对应 list 中剔除 count 个和 value 相符的要素。

count>0 时,按自始至终的各样删除:

127.0.0.1:6379> rpush list hello

(integer) 1

127.0.0.1:6379> rpush list hello

(integer) 2

127.0.0.1:6379> rpush list world

(integer) 3

127.0.0.1:6379> rpush list hello

(integer) 4

127.0.0.1:6379> rpush list hello

(integer) 5

127.0.0.1:6379> lrem list 2 hello

(integer) 2

127.0.0.1:6379> lrange list 0 -1

1) “world”

2) “hello”

3) “hello”

count<0 时,按从尾到头的次第删除

127.0.0.1:6379> lrange list 0 -1

1) “hello”

2) “hello”

3) “world”

4) “hello”

5) “hello”

127.0.0.1:6379> lrem list -2 hello

(integer) 2

127.0.0.1:6379> lrange list 0 -1

1) “hello”

2) “hello”

3) “world”

count=0 时,删除全体

127.0.0.1:6379> lrange list 0 -1

1) “hello”

2) “hello”

3) “world”

4) “hello”

5) “hello”

127.0.0.1:6379> lrem list 0 hello

(integer) 4

127.0.0.1:6379> lrange list 0 -1

1) “world”

6 ltrim

保留钦命 key 的值范围内的数目

127.0.0.1:6379> lrange list 0 -1

1) “0”

2) “1”

3) “2”

4) “3”

5) “4”

127.0.0.1:6379> ltrim list 1 -1

OK

127.0.0.1:6379> lrange list 0 -1

1) “1”

2) “2”

3) “3”

4) “4”

7 lpop(弹出并删除)

从 list 的头顶删除成分,并回到删除成分。

127.0.0.1:6379> lrange list 0 -1

1) “1”

2) “2”

3) “3”

4) “4”

127.0.0.1:6379> lpop list

“1”

127.0.0.1:6379> lrange list 0 -1

1) “2”

2) “3”

3) “4”

8 rpop(弹出并剔除)**

从 list 的尾巴部分删除成分,并赶回删除成分

9 rpoplpush

从第三个 list 的尾巴移除成分并增加到第3个 list
的头顶,最终回到被移除的因素值,整个操作是原子的.假诺第一个 list
是空可能空头支票再次来到 nil

127.0.0.1:6379> lrange list1 0 -1

1) “0”

2) “1”

3) “2”

4) “3”

127.0.0.1:6379> lrange list2 0 -1

1) “zero”

2) “onr”

3) “two”

4) “three”

127.0.0.1:6379> rpoplpush list1 list2

“3”

127.0.0.1:6379> lrange list1 0 -1

1) “0”

2) “1”

3) “2”

127.0.0.1:6379> lrange list2 0 -1

1) “3”

2) “zero”

3) “onr”

4) “two”

5) “three”

10 lindex

回来名称叫 key 的 list 中 index 地点成分

127.0.0.1:6379> lrange list2 0 -1

1) “3”

2) “zero”

3) “onr”

4) “two”

5) “three”

127.0.0.1:6379> lindex list2 3

“two”

在 key 对应 list 的头顶 增多字符串成分。

11 llen

返回 key 对应 list 的长度

(integer) 5127.0.0.1:6379> lrange list2 0 -1

1) “3”

2) “zero”

3) “onr”

4) “two”

5) “three”

127.0.0.1:6379> llen list2

(integer) 5

② lrange 方法

12 blpop

它是lpop一声令下的封堵版本,当给定列表内未有其余因素可供弹出的时候,连接将被blpop命令堵塞,直到等待超时或开采可弹出成分截至。当给定四个key参数时,按参数key的前后相继顺序依次检查各类列表,弹出第2个非空驶列车表的头成分。必需安装timeout超时参数,当timeout为0时意味着梗塞时间最棒延长。

127.0.0.1:6379> del list1 command

(integer) 1

127.0.0.1:6379> lpush command name

(integer) 1

127.0.0.1:6379> lpush request wxc

(integer) 1

127.0.0.1:6379> blpop list1 command request 0

1) “command”

2) “name”

lrange list1 0 -1 代表从链表 list1 的底部第4个成分取到 尾巴部分先是个因素。

13 brpop

类似blpop

复制代码 代码如下:127.0.0.1:6379 lpush
list1 hello(integer卡塔尔国 1

14 brpoplpush

类似rpoplpush

127.0.0.1:6379 lpush list1 world(integer) 2

15 lpushx

将值value插入到列表key的表头,当且仅当key存在何况是一个列表。和lpush命令相反,当key不设临时,lpushx命令什么也不做。

127.0.0.1:6379 lrange list1 0 -11) “world”2) “hello”

③ rpush 方法

在 key 对应 list 的尾巴 增加字符串成分。

复制代码 代码如下:127.0.0.1:6379 rpush
list2 hello(integerState of Qatar 1

127.0.0.1:6379 rpush list2 world(integer) 2

127.0.0.1:6379 lrange list2 0 -11State of Qatar “hello”2State of Qatar “world”无论是 lpush 还是rpush 方法,都以从 list 的 两端压入。

④ linsert 方法

在 key 对应 list 的特定岗位前或后增多字符串。

复制代码 代码如下:127.0.0.1:6379 rpush
list3 one(integer卡塔尔 1

127.0.0.1:6379 linsert list3 before one two(integer) 2

127.0.0.1:6379 lrange list3 0 -11) “two”2) “one”

127.0.0.1:6379 linsert list3 before one three(integer) 3

127.0.0.1:6379 lrange list3 0 -11) “two”2) “three”3) “one”

注意:

| | 头

| | ↑

| | 尾

⑤ lset 方法

设置 list 中钦定下标的成分值。

复制代码 代码如下:127.0.0.1:6379 lrange
list3 0 -11卡塔尔国 “two”2卡塔尔(قطر‎ “three”3卡塔尔(قطر‎ “one”

127.0.0.1:6379 lset list3 1 tmpOK

127.0.0.1:6379 lrange list3 0 -11) “two”2) “tmp”3) “one”

127.0.0.1:6379 lset list3 0 resetOK

127.0.0.1:6379 lrange list3 0 -11) “reset”2) “tmp”3) “one”

⑥ lrem 方法

从 key 对应 list 中删去 n 个和 value 相似的要素。。重临删除的个数。

复制代码 代码如下:127.0.0.1:6379 lrange
list3 0 -11卡塔尔 “reset”2卡塔尔 “tmp”3卡塔尔国 “one”

127.0.0.1:6379 lpush list3 two(integer) 4127.0.0.1:6379 lpush list3
two(integer) 5127.0.0.1:6379 lpush list3 two(integer) 6

127.0.0.1:6379 lrange list3 0 -11) “two”2) “two”3) “two”4) “reset”5)
“tmp”6) “one”

127.0.0.1:6379 lrem list3 1 two(integer) 1