redis 發(fā)布訂閱(pub/sub)是一種消息通信模式:發(fā)送者(pub)發(fā)送消息,訂閱者(sub)接收消息。
Redis 客戶端可以訂閱任意數(shù)量的頻道。? ? ? ? ? ? ? ? (推薦學(xué)習(xí):Redis視頻教程)
Redis提供了發(fā)布訂閱功能,可以用于消息的傳輸,Redis的發(fā)布訂閱機(jī)制包括三個(gè)部分,發(fā)布者,訂閱者和channel。?
發(fā)布者和訂閱者都是Redis客戶端,Channel則為Redis服務(wù)器端,發(fā)布者將消息發(fā)送到某個(gè)的頻道,訂閱了這個(gè)頻道的訂閱者就能接收到這條消息。Redis的這種發(fā)布訂閱機(jī)制與基于主題的發(fā)布訂閱類似,Channel相當(dāng)于主題。
1,引入Jedis
????????<dependency> ????????????<groupid>redis.clients</groupid> ????????????<artifactid>jedis</artifactid> ????????????<version>2.9.0</version> ????????</dependency>
2,具體實(shí)現(xiàn)代碼
package?com.hcmony.sword.redis; ? import?org.apache.commons.lang3.StringUtils; import?redis.clients.jedis.Jedis; import?redis.clients.jedis.JedisPool; import?redis.clients.jedis.JedisPubSub; ? /** ?*?<h3>Shenjue.java基本描述</h3> ?*?<p></p> ?* ?*?@author?hcmony ?*?@since?V1.0.0,?2019/05/06?20:07 ?*/ public?class?RedisMQ?{ ? private?static?final?String?TOPIC="TOPIC"; ? private?final?JedisPool?jedisPool; ? public?RedisMQ(JedisPool?jedisPool)?{ this.jedisPool?=?jedisPool; } ? /** ?*?發(fā)布消息 ?*?@param?topic ?*?@param?messge ?*/ public?void?publish(String?topic?,String?messge){ ? Jedis?jedis?=?null; if?(StringUtils.isBlank(topic)){ topic=TOPIC; } try?{ jedis?=?jedisPool.getResource(); jedis.publish(topic,messge); } finally?{ if?(null?!=?jedis)?{ jedis.close(); } } } ? /** ?*?訂閱消息 ?*?@param?topic ?*?@param?jedisPubSub ?*/ public?void?subscribe(String?topic,JedisPubSub?jedisPubSub){ ? Jedis?jedis?=?null; if?(StringUtils.isBlank(topic)){ topic=TOPIC; } try?{ jedis?=?jedisPool.getResource(); jedis.subscribe(jedisPubSub,topic); } finally?{ if?(null?!=?jedis)?{ jedis.close(); } } } ? ? public?static?void?main(String[]?args)?{ //默認(rèn)連接本地redis, //?loclhost:6379 JedisPool?jedisPool?=?new?JedisPool(); RedisMQ?publish?=?new?RedisMQ(jedisPool); new?Thread(new?Runnable()?{ @Override public?void?run()?{ publish.subscribe("PID",new?MyjedisPubSub()); } }).start(); for?(int?i=0;i<p>更多Redis相關(guān)技術(shù)文章,請(qǐng)?jiān)L問<a href="https://www.php.cn/course/list/54.html" target="_self">Redis視頻教程</a>欄目進(jìn)行學(xué)習(xí)!</p>
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載。
THE END