爲了避免在我的redis頻道重複,我正在檢查是否已經存在的消息通過在Redis中設置索引。以下是我的實施。但是,這是一個例外。Redis異常與Jedis客戶端的交易
redis.clients.jedis.exceptions.JedisDataException: Please close pipeline or multi block before calling this method.
at redis.clients.jedis.Response.get(Response.java:23)
這是實施。
Jedis jedis = pool.getResource();
String id = message.getId();
Transaction transaction = jedis.multi();
redis.clients.jedis.Response<java.lang.Boolean> response = transaction.sismember(ID_SET_REDIS_KEY, id);
if (response != null && !response.get().booleanValue()) {
//add it to the
transaction.sadd(ID_SET_REDIS_KEY, id);
transaction.publish(redisChannelName, message);
}
transaction.exec();
pool.returnResource(jedis);
因爲有多個發佈者可能發佈完全相同的消息,所以我需要在事務內部進行獲取。
實際上,您可以通過「WATCH」獲得交易結果。 http://redis.io/topics/transactions。我不認爲有必要在這裏寫lua腳本。 @Soumya Simanta –