Redis应用之实现简单的消息队列

使用Redis实现消息队列,需要借助Redis五个基本数据结构中的 List 。我们知道,List 是一个双向链表,可以通过 lpush (rpush) 和 rpop (lpop) 写入和读取消息,我们可以使用List 来模拟生产者消费者模型中的缓冲容器。

实现简单的消息队列

本文测试环境为Windows10,Redis版本为3.2.100。
首先我们开启Redis服务。(windows下,直接双击redis-server.exe即可)
在这里插入图片描述
接着我们打开两个客户端(windows下,双击redis-cli.exe即可),在其中一个客户端,创建list,向其中随便推入几个值。
在这里插入图片描述
然后,我们在另一个客户端,执行与推入方向相反的弹出操作,就能实现消息的拉取了。
在这里插入图片描述
至此,我们简单的模拟了,生产者生产数据,消费者消费数据,但是还有一个问题,如果 List 里没有数据,那么消费者执行 pop 操作将不会得到任何结果,并且当生产者已经生产好数据后,消费者不会自动去消费数据。基于此,Redis提供给了我们另一个命令。

BLPOP key [key ...] timeout

如果队列中没有元素,执行这个这条命令,会在timeout的时间内阻塞并等待可弹出的元素出现。我们使用这个命令再来观察生产者和消费者的交互行为。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

我们可以看到,使用BLPOP不会立即返回,而会在30秒的时间内进行等待,生产者生产好数据之后,BLPOP就会返回队列首端的数据,并返回此次等待的时间 27.93秒。

至此,我们使用Redis实现了一个简单的消息队列。不过在实际的大型业务场景中,最好还是使用 Kafka、RabbitMQ 等消息中间件。

发布/订阅模式

顺便再来看一下使用Redis实现简单的发布/订阅,模拟一个生产者(发布者)生产的数据,被多个消费者(订阅者)消费的场景。

保留上面我们打开的两个客户端,此外我们再打开两个客户端。选择其中两个客户端,订阅 topic 频道(注意,频道不需要事先建立)。再挑选一个客户端,订阅anotherTopic频道。

订阅命令:SUBSCRIBE channel [channel ...] 订阅一个或多个频道

在这里插入图片描述
在这里插入图片描述
之后,我们在最后一个空闲的客户端中发布消息。

发布命令:PUBLISH channel message 向指定channel发布消息

在这里插入图片描述
接下来我们来看看前三个客户端的反应。
在这里插入图片描述
我们可以看到,订阅了topic频道的订阅者已经成功收到了消息。而订阅了anotherTopic频道的订阅者没反应。至此,我们使用Redis实现了一个简单的订阅/发布模式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值