关于redis:redis学习笔记之5list栈队列阻塞队列

45次阅读

共计 1195 个字符,预计需要花费 3 分钟才能阅读完成。

上一篇: 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> 

正文完
 0