JedisCluster實現redis的keys命令的方法_redis

來源:互聯網
上載者:User

由於JedisCluster沒有提供對keys命令的封裝,只能自己實現:


先定義介面。使用TreeSet返回,是為了可以方便地利用它的first()方法:

public interface IRedisOperator {/** * 根據pattern 擷取所有的keys * @param pattern * @return */TreeSet<String> keys(String pattern);}

實作類別:

public class RedisOperator implements IRedisOperator {public final static Logger logger = LoggerFactory.getLogger(RedisOperator.class);@Autowiredprivate JedisCluster jedisCluster;@Overridepublic TreeSet<String> keys(String pattern){logger.debug("Start getting keys...");TreeSet<String> keys = new TreeSet<>();Map<String, JedisPool> clusterNodes = jedisCluster.getClusterNodes();for(String k : clusterNodes.keySet()){logger.debug("Getting keys from: {}", k);JedisPool jp = clusterNodes.get(k);Jedis connection = jp.getResource();try {keys.addAll(connection.keys(pattern));} catch(Exception e){logger.error("Getting keys error: {}", e);} finally{logger.debug("Connection closed.");connection.close();//用完一定要close這個連結。。。}}logger.debug("Keys gotten!");return keys;}}

調用:

TreeSet<String> keys = redisOperator.keys(prefix);Map<String, Object> data = new LinkedHashMap<>();data.put("prefix", prefix);data.put("count", keys.size());String type = "unknown";if(keys.size()>0){type = redisOperator.type(keys.first());}data.put("type", type);


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.