JedisCluster实现redis的keys命令的方法
2016-07-03 19:24
756 查看
由于JedisCluster没有提供对keys命令的封装,只能自己实现:
先定义接口。使用TreeSet返回,是为了可以方便地利用它的first()方法:
[java] view
plain copy
public interface IRedisOperator {
/**
* 根据pattern 获取所有的keys
* @param pattern
* @return
*/
TreeSet<String> keys(String pattern);
}
实现类:
[java] view
plain copy
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;
}
}
调用:
[java] view
plain copy
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);
先定义接口。使用TreeSet返回,是为了可以方便地利用它的first()方法:
[java] view
plain copy
public interface IRedisOperator {
/**
* 根据pattern 获取所有的keys
* @param pattern
* @return
*/
TreeSet<String> keys(String pattern);
}
实现类:
[java] view
plain copy
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;
}
}
调用:
[java] view
plain copy
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);
相关文章推荐
- redis系列:将redis启动宿主到Windows服务中
- redis源码解析1-简单动态字符串
- redis 有序集合
- redis
- redis 集合操作
- redis列表操作
- redis字符串操作
- Linux下redis的安装和配置简介
- spring 使用redis集群配置
- redis总结
- Redis(2)用jedis实现在java中使用redis
- redis的发布订阅模式
- CentOS 6.5 下安装 Redis 2.8.7
- CentOS 6.5 下安装 Redis 2.8.7
- centos redis 自动重启
- Redis学习笔记(3)-Redis事务,过期时间,队列
- Redis学习笔记(3)-Redis事务,过期时间,队列
- Redis学习笔记(3)-Redis事务,过期时间,队列
- Redis学习笔记(3)-Redis事务,过期时间,队列
- Redis学习笔记(2)-Redis数据类型