Spring Data 为 Redis 提供了专用的消息传递集成,在功能和命名上类似于 Spring 框架中的 JMS(Java Message Service)集成。
Spring Data Redis 中,RedisTemplate 类用于生成消息。对于类似于 Java EE 消息驱动 Bean 风格的异步接收消息,Spring Data 提供了一个专用的消息侦听器容器,用于创建消息驱动 POJO(MDP)。对于同步接收消息,Spring Data Redis 还提供了 RedisConnection 契约。
Spring Data Redis 中,org.springframework.data.redis.connection 和 org.springfrawork.data.redis.listener 包提供了Redis 消息传递的核心功能。
接下来将简单介绍一下 Redis 的消息发布订阅。
频道(Channel):可以理解为一个消息队列
消息(Message):在发布者和消费者之间传递的对象,携带了有效的数据
发布者(Publisher):创建消息,并发布到 Redis 的频道
消费者(Consumer):接收消息,并消费消息
订阅(Subscription):由消费者告诉 Redis,哪些频道是客户端感兴趣的。然后,当 Redis 收到消息后,如果满足匹配条件,则下发到客户端
Redis 的发布订阅(pub/sub)是一种消息通信模式,该模式大致可分为两个步骤:
(1)发布或生产消息,Redis 将消息发布到频道(Channel)中,由频道下发到客户端(redis cli)
(2)订阅或消费消息,客户端订阅自己感兴趣的频道(Channel),频道收到数据后,下发到客户端
Redis 通过 publish 和 subscribe 等命令实现了订阅与发布模式,这个功能提供两种消息机制,分别是订阅/发布到频道、订阅/发布到模式的客户端。
注意:Redis 客户端可以订阅任意数量的频道(Channel)
下图展示了频道 channel1 , 以及订阅这个频道的三个客户端 —— client2 、 client5 和 client1 之间的关系:
下图展示了当有新消息通过 PUBLISH 命令发送给频道 channel1 时, 这个消息就会被发送给订阅它的三个客户端:
以下实例演示了发布订阅是如何工作的,需要开启两个 redis-cli 客户端。
在我们实例中我们创建了名为 hxstrive 的订阅频道。如下:
D:\server\redis-x64-5.0.14.1> redis-cli 127.0.0.1:6379> subscribe hxstrive Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "hxstrive" 3) (integer) 1 1) "message" 2) "hxstrive" 3) "hi,www.hxstrive.com" 1) "message" 2) "hxstrive" 3) "spring data redis"
在频道 hxstrive 发布两次消息,订阅者(客户端一)就能接收到消息。如下:
D:\server\redis-x64-5.0.14.1> redis-cli 127.0.0.1:6379> PUBLISH hxstrive "hi,www.hxstrive.com" (integer) 1 127.0.0.1:6379> PUBLISH hxstrive "spring data redis" (integer) 1 127.0.0.1:6379>
到这里就简单介绍了 Redis 的消息发布和订阅,后面将进一步介绍怎样利用 Spring Data Redis 发布消息和消费消息等。