Browse Source

!53 feat:Redis(订阅与发布) Test:https://jfinal.com/share/2148
Merge pull request !53 from 杜福忠/N/A

JFinal 5 years ago
parent
commit
71cf2071ad
1 changed files with 60 additions and 1 deletions
  1. 60 1
      src/main/java/com/jfinal/plugin/redis/Cache.java

+ 60 - 1
src/main/java/com/jfinal/plugin/redis/Cache.java

@@ -1186,7 +1186,66 @@ public class Cache {
 		}
 		finally {close(jedis);}
 	}
-	
+
+	/**
+	 * subscribe channel [channel …] 订阅一个或多个频道 <br/>
+	 * PS:<br/>
+	 *    取消订阅在 jedisPubSub 中的 unsubscribe 方法。<br/>
+	 *    重要:订阅后代码会阻塞监听发布的内容<br/>
+	 */
+	public void subscribe(final JedisPubSub jedisPubSub, final String... channels) {
+		Jedis jedis = getJedis();
+		try {
+			jedis.subscribe(jedisPubSub, channels);
+		}
+		finally {close(jedis);}
+	}
+
+	/**
+	 * subscribe channel [channel …] 订阅一个或多个频道<br/>
+	 * PS:<br/>
+	 *    取消订阅在 jedisPubSub 中的 unsubscribe 方法。<br/>
+	 */
+	public JedisPubSub subscribeThread(final JedisPubSub jedisPubSub, final String... channels) {
+		new Thread(() -> subscribe(jedisPubSub, channels)).start();
+		return jedisPubSub;
+	}
+
+	/**
+	 * psubscribe pattern [pattern …] 订阅给定模式相匹配的所有频道<br/>
+	 * PS:<br/>
+	 *     取消订阅在 jedisPubSub 中的 punsubscribe 方法。<br/>
+	 *     重要:订阅后代码会阻塞监听发布的内容<br/>
+	 */
+	public void psubscribe(final JedisPubSub jedisPubSub, final String... patterns) {
+		Jedis jedis = getJedis();
+		try {
+			jedis.psubscribe(jedisPubSub, patterns);
+		}
+		finally {close(jedis);}
+	}
+
+	/**
+	 * psubscribe pattern [pattern …] 订阅给定模式相匹配的所有频道<br/>
+	 * PS:<br/>
+	 *     取消订阅在 jedisPubSub 中的 punsubscribe 方法。<br/>
+	 */
+	public JedisPubSub psubscribeThread(final JedisPubSub jedisPubSub, final String... patterns) {
+		new Thread(() -> psubscribe(jedisPubSub, patterns)).start();
+		return jedisPubSub;
+	}
+
+	/**
+	 * publish channel message 给指定的频道发消息
+	 */
+	public Long publish(final String channel, final String message) {
+		Jedis jedis = getJedis();
+		try {
+			return jedis.publish(channel, message);
+		}
+		finally {close(jedis);}
+	}
+
 	// ---------
 	
 	protected byte[] keyToBytes(Object key) {