上一篇: redis 学习笔记之 -(4)-set(无序不反复汇合)
list 无关的命令:
lpush/rpush/lpop/rpop/brpop/blpop
5.1 栈 (stack)=lpush+lpop(出入同一端)
lpush+lpop
127.0.0.1:6379> lpush juc synchronized volatile aqs thread
(integer) 4
127.0.0.1:6379> lpop juc # 最初进入的最先出列
"thread"
127.0.0.1:6379> lpop juc # 倒数第二个
"aqs"
127.0.0.1:6379> lpop juc # 倒数第三个
"volatile"
127.0.0.1:6379>
5.2 队列 (queue)=lpush+rpop(出入两端)
lpush+rpop
127.0.0.1:6379> del juc
(integer) 1
127.0.0.1:6379> lpush juc synchronized volatile aqs thread
(integer) 4
127.0.0.1:6379> rpop juc # 先进先出
"synchronized"
127.0.0.1:6379> rpop juc # 先进先出
"volatile"
127.0.0.1:6379> rpop juc # 先进先出
"aqs"
127.0.0.1:6379>
5.3 阻塞队列 =lpush+brpop(pop 阻塞)
lpush+brpop
brpop 语法:
brpop key [key...] timout
timeout = 0 示意如果没有数据插入就始终阻塞;
timeout = 5 示意阻塞 5 秒 如果工夫到还没有值就返回 null;
示例:
127.0.0.1:6379> del juc
(integer) 0
127.0.0.1:6379> lpush juc synchronized volatile aqs thread # key=juc 入队 4 个词
(integer) 4
127.0.0.1:6379> brpop juc 5 # 从 juc 中 pop 一个, 如果没有元素, 候时 5s
1) "juc"
2) "synchronized"
127.0.0.1:6379> brpop juc 5
1) "juc"
2) "volatile"
127.0.0.1:6379> brpop juc 5
1) "juc"
2) "aqs"
127.0.0.1:6379> brpop juc 5
1) "juc"
2) "thread"
127.0.0.1:6379> brpop juc 5 # 从 juc 中 pop 一个, 如果没有元素, 候时 5s 后没有新 push 进去的, 返回 null
(nil)
(5.07s)
# 此时, 另开一个终端 redis-cli, 执行了: `lpush juc semaphore`
127.0.0.1:6379> brpop juc 0 # 从 juc 中 pop 一个, 如果没有元素, 阻塞始终期待
1) "juc"
2) "semaphore"
(15.96s)
127.0.0.1:6379>