Redis叢集下使用Jedis實現keys模糊查詢
阿新 • • 發佈:2019-02-17
JedisCluster中不支援keys模糊查詢
在非叢集環境下,可以直接建立JedisPool物件,然後呼叫getResource()方法獲取Jedis連線物件,然後就可以呼叫Jedis API操作redis了,Jedis物件支援keys模糊查詢。
在叢集環境下,有多個JedisPool連線池物件節點,想要完整地實現keys模糊查詢,需要遍歷所有連線池,對每個連線池物件呼叫getResource()方法獲取各個Jedis連線物件,實現方式如下:
/** * 實現redis keys 模糊查詢 * @author hq * @param pattern * @return */ private List<String> redisKeys(String pattern){ logger.info("開始模糊查詢【{}】keys", pattern); List<String> keys = new ArrayList<>(); //獲取所有連線池節點 Map<String, JedisPool> nodes = jedisCluster.getClusterNodes(); //遍歷所有連線池,逐個進行模糊查詢 for(String k : nodes.keySet()){ logger.debug("從【{}】獲取keys", k); JedisPool pool = nodes.get(k); //獲取Jedis物件,Jedis物件支援keys模糊查詢 Jedis connection = pool.getResource(); try { keys.addAll(connection.keys(pattern)); } catch(Exception e){ logger.error("獲取key異常", e); } finally{ logger.info("關閉連線"); //一定要關閉連線! connection.close(); } } logger.info("已獲取所有keys"); return keys; }