redis学习笔记之-(5)-list(栈-队列-阻塞队列)
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>
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 hi@niewj.com