孝感英文网站建设,网站建设模块化实现,深圳品牌网站设计专家,个人可以采集视频做网站吗欢迎关注赵强老师微信公众号#xff1a;myitshareRedis 作为一个publish/subscribe server#xff0c;起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型#xff0c;当发布者通过publish命令向Redis server发送特定类型…欢迎关注赵强老师微信公众号myitshareRedis 作为一个publish/subscribe server起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型当发布者通过publish命令向Redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个channel,也可以向多个channel发送消息。下图为大家展示了Redis消息机制的体系架构。发布者和订阅者都是Redis客户端Channel则为Redis服务器端发布者将消息发送到某个的频道订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似Channel相当于主题。下面列出来了Redis发布消息、订阅消息的相关命令。publish
发送消息Redis采用PUBLISH命令发送消息其返回值为接收到该消息的订阅者的数量。 subscribe
订阅某个频道Redis采用SUBSCRIBE命令订阅某个频道其返回值包括客户端订阅的频道目前已订阅的频道数量以及接收到的消息其中subscribe表示已经成功订阅了某个频道。 psubscribe
模式匹配模式匹配功能允许客户端订阅符合某个模式的频道Redis采用PSUBSCRIBE订阅符合某个模式所有频道用“”表示模式“”可以被任意值代替。
案例一一个消息生产者两个消息消费者案例二两个消息生产者一个消息消费者案例三Redis消息机制的Java API 添加依赖dependencygroupIdredis.clients/groupIdartifactIdjedis/artifactIdversion3.1.0/version
/dependency 消息监听器类import redis.clients.jedis.JedisPubSub;public class RedisMsgPubSubListener extends JedisPubSub {Overridepublic void unsubscribe() {super.unsubscribe();}Overridepublic void unsubscribe(String... channels) {super.unsubscribe(channels);}Overridepublic void subscribe(String... channels) {super.subscribe(channels);}Overridepublic void psubscribe(String... patterns) {super.psubscribe(patterns);}Overridepublic void punsubscribe() {super.punsubscribe();}Overridepublic void punsubscribe(String... patterns) {super.punsubscribe(patterns);}Overridepublic void onMessage(String channel, String message) {System.out.println(channel: channel receives message : message);this.unsubscribe();}Overridepublic void onPMessage(String pattern, String channel, String message) {}Overridepublic void onSubscribe(String channel, int subscribedChannels) {System.out.println(channel: channel is been subscribed: subscribedChannels);}Overridepublic void onPUnsubscribe(String pattern, int subscribedChannels) {}Overridepublic void onPSubscribe(String pattern, int subscribedChannels) {}Overridepublic void onUnsubscribe(String channel, int subscribedChannels) {System.out.println(channel: channel is been unsubscribed: subscribedChannels);}
}测试程序package demo.redis;import redis.clients.jedis.Jedis;public class TestMain {Testpublic void testSubscribe() throws Exception{Jedis jedis new Jedis(localhost);RedisMsgPubSubListener listener new RedisMsgPubSubListener();jedis.subscribe(listener, redisChatTest);//other code}Testpublic void testPublish() throws Exception{Jedis jedis new Jedis(localhost);jedis.publish(redisChatTest, Hello World);Thread.sleep(5000);jedis.publish(redisChatTest, Hello Redis);}
}
欢迎关注赵强老师微信公众号myitshare