redis 使用keys的注意事项,生产建议使用scan

keys * : 查询所有的键,当redis中key数量越大,keys 命令执行越慢,而且最重要的会阻塞服务器,对单线程的redis来说,简直是灾难,终于找到了替代命令scan。注意,如果该机器是生产环境正在对外提供服务,不建议使用keys * pattern的方法进行查询,可能会使服务器卡顿,而出现事故。一般生产服务器建议使用Scan命令,例如:SCAN    0   MATCH  aaa*   COUNT    5  表示从游标0开始查询aaa开头的key,每次检索5条记录,返回符合的记录。

 

redis中存在的key:


jedis中使用scan:

public class Test001 {
	public static void main(String[] args) throws Exception {
		
		JedisPool pool = new JedisPool("127.0.0.1",6379);
		Jedis jedis = pool.getResource();
		
		String cursor = ScanParams.SCAN_POINTER_START;//String.valueOf(0)
	    String key = "my*";// 匹配以 my为前缀的 key,如果是 *my*,则匹配带有 my 的key
	    ScanParams scanParams = new ScanParams();
	    scanParams.match(key);// 匹配以 my为前缀的 key
	    scanParams.count(5);//表示每次检索多少条记录
	    while (true){
	        //使用scan命令获取5条数据,使用cursor游标记录位置,下次循环使用
	        ScanResult<String> scanResult = jedis.scan(cursor, scanParams);
	        cursor = scanResult.getStringCursor();// 返回0 说明遍历完成
	        List<String> list = scanResult.getResult();
	        for(String str:list){
	        	System.out.println(str);
	        }
	        System.out.println("===============");
	        
	        //当cursor为0的时候,退出循环
	        if ("0".equals(cursor)){
	            break;
	        }
	    }

		
	}

结果:

 同样的,如果我们想批量删除key,在jedis中先使用scan查找出符合条件的key,然后再用jedis.del 删除。
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值