java获取redis集群的所有keys值和集群的主服务器判断

因项目要求需要展示捉去redis集群的所有key值数量,中间找了很多资料翻了很多博客,没有找到现成的,只能自己总结了。代码如果有什么问题欢迎反馈。
一:首先是获取一个redis数据库上的所有keys

	public static long getScan(String hostname,int port){
		Jedis jedis =new Jedis(hostname,port);
        // 游标初始值为0
        String cursor = ScanParams.SCAN_POINTER_START;
        String key = "*";
        ScanParams scanParams = new ScanParams();
        scanParams.match(key);// 匹配以 PLFX-ZZSFP-* 为前缀的 key
        scanParams.count(1000);
        List<String> listAll=new ArrayList<String>();
        while (true){
            //使用scan命令获取数据,使用cursor游标记录位置,下次循环使用
            ScanResult<String> scanResult = jedis.scan(cursor, scanParams);
            cursor=scanResult.getCursor();
            List<String> list = scanResult.getResult();
            listAll.addAll(list);
            System.out.println("获取" + listAll.size()  
                + "条数据,cursor:" + cursor);
            if ("0".equals(cursor)){
                break;
            }           
        }
        jedis.close();
        return listAll.size();
	}

二:获取集群所有数据库的keys

public  long getRedisCount(){
		long countAll=0l;
		long count=0l;
		Map<String,String> map=setRedis();
		for(String str:map.keySet()){
			String hostname=str.split(":")[0];
			int port=Integer.parseInt(str.split(":")[1]);
			Jedis jedis =new Jedis(hostname,port);
			Client client=jedis.getClient();
			client.info();
			String info=client.getBulkReply();
			String info1=info.trim().split("role:")[1].substring(0, 6).trim();
			if(info1.equals("master")){//判断该redis是否是主数据库,是就执行keys获取,不是就不执行
				count=getScan(hostname, port);
				countAll+=count;
			}
			jedis.close();
		}
		System.out.println("获取"+countAll+"条数据");
		return countAll;
	}
	public static Map<String,String> setRedis(){
		Map<String,String> map=new HashMap<String, String>();
		map.put("1.1.1.1:7001", "1.1.1.1:7001");
		map.put("1.1.1.1:7002", "1.1.1.1:7002");
		map.put("1.1.1.1:7003", "1.1.1.1:7003");
		map.put("1.1.1.1:7004", "1.1.1.1:7004");
		map.put("1.1.1.1:7005", "1.1.1.1:7005");	
		map.put("1.1.1.1:7006", "1.1.1.1:7006");
		return map;
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Rediszyjk rediszyjk=new Rediszyjk();
		rediszyjk.insertRedisZyjk();
	}

注意:jedis.close()这个方法只有3.0以上版本的redis支持,加载jar包的时候要下载3.0以上版本的。
参考文章:
http://www.mamicode.com/info-detail-2906857.html scan获取所有keys
https://blog.csdn.net/softwave/article/details/70992794 获取redis数据库的主从关系

你可能感兴趣的:(redis)