JedisCluster实现redis的keys命令的方法

由于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);

	@Autowired
	private JedisCluster jedisCluster;

	@Override
	public 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);


评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值