Redis List 命令技巧

1.实现栈的功能(先进后出)

lpush + lpop = stack

127.0.0.1:6379> lpush mylist 1 2 3 4 5
(integer) 5
127.0.0.1:6379> lpop mylist
"5"
127.0.0.1:6379> lpop mylist
"4"
127.0.0.1:6379> lrange mylist 0 -1
1) "3"
2) "2"
3) "1"

 

2. 实现队列功能

lpush + rpop   = queue

127.0.0.1:6379> lpush mylist 4 5
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> rpop mylist
"1"
127.0.0.1:6379> rpop mylist
"2"
127.0.0.1:6379> lrange mylist 0 -1
1) "5"
2) "4"
3) "3"

 

3. 实现有限数据集合

lpush + ltrim = capped collection

ltrim [ltrim key  range_l range_r]:保留区域类的元素,其他的删除

127.0.0.1:6379> rpush mylist 2 1
(integer) 5
127.0.0.1:6379> lrange mylist 0 -1
1) "5"
2) "4"
3) "3"
4) "2"
5) "1"
127.0.0.1:6379> ltrim mylist 2 3
OK
127.0.0.1:6379> lrange mylist 0 -1
1) "3"
2) "2"

 

4.实现消息队列

lpush + brpop = message queue

Redis Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。

操作命令   BRPOP list  timeout

brpop mylist 10

返回值

假如在指定时间内没有任何元素被弹出,则返回一个 nil 和等待时长。 反之,返回一个含有两个元素的列表,第一个元素是被弹出元素所属的 key ,第二个元素是被弹出元素的值。

127.0.0.1:6379> lpush mylist 1 2 3 4 5
(integer) 5
127.0.0.1:6379> brpop mylist 10
1) "mylist"
2) "1"
127.0.0.1:6379> brpop mylist 100
1) "mylist"
2) "2"
127.0.0.1:6379> brpop mylist 10000
1) "mylist"
2) "3"
127.0.0.1:6379> brpop mylist 10
1) "mylist"
2) "4"
127.0.0.1:6379> brpop mylist 10
1) "mylist"
2) "5"
127.0.0.1:6379> brpop mylist 10
(nil)
(10.05s)

 

posted @ 2019-06-14 18:10  haoprogrammer  阅读(2030)  评论(0编辑  收藏  举报