消息队列用途:解耦,异步,消峰。
redis实现消息队列的方式:使用List作为key。(先进先出)
实现方法:①lpush,rpop 非阻塞式 ②lpush,brpop 阻塞式
注:柱塞式队列–当队列为空/满时,无法从队列中删除/增加元素。(所谓阻塞:在某种情况下,线程被挂起,直到触发满足条件自动唤醒线程)
语法样式1:(实现优先级消息队列)
redis 192.168.8.123>brpop listKeyName1 listKeyName2 listKeyName3 … timeOut(超时时间–单位秒)
语法样式2:
redid 192.168.8.123>brpop listKeyName timeout(超时时间–单位秒)
注意事项:
1 listKeyName listKeyName1 listKeyName2 listKeyName3 …必须为list(列表)类型,或不存在于redis数据库中。
2 timeOut 必须为一个大于等于0的整数
3 当timeout 等于0 挂起等待时间为无限大
4 当timeout 大于0 挂起等待时间为timeout秒数
5 如果客户端命令等待时间大于超时时间后,所有的元素列表都为空,此时会返回(nil)
6 brpop命令执行方法 首先获取 listKeyName1 中的元素,直到listKeyName1 阻塞,继续 查找listKeyName2 中的元素 ,如果为空,则继续查找listKeyName3 依次查找。
当brpop命令在阻塞等待时,此时listKeyName1 listKeyName2 listKeyName3 … 中任意一个键中存在元素,则客户端会返回相应的键值,并返回相应的元素值,跳出命令。