1. 程式人生 > >Redis叢集下使用Jedis實現keys模糊查詢

Redis叢集下使用Jedis實現keys模糊查詢

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;  
    }