跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

redis怎么获取所有key

keys:全量遍历键,用来列出所有满足特定正则字符串规则的key,假设 redis 此时正在生产环境下,使用该命令就会造成隐患,当redis数据量比较大时: keys会一次性返回所有符合条件的key,所以会造成redis的卡顿。 SCAN迭代器是基于游标的,需使用上一次的游标来继续之前的迭代过程。使用游标0作为起点,执行新的遍历操作并且不断迭代,直到命令返回游标0完成整个遍历。 此命令并不保证每次执行都返回某个给定数量的元素,甚至会返回0个元素,但只要游标不是0,程序都不会认为SCAN命令结束,但是返回的元素数量大概率符合count参数。另外,SCAN支持模糊查询。 Redis 8.2.3 Redis 8.2.3 是一款安全优先的高性能键值存储系统。该版本紧急修复了可能引发远程代码执行(RCE)的高危漏洞(CVE-2025-62507),并解决了 HyperLogLog 及 Cuckoo Filter 等数据结构在特定场景下的崩溃问题。建议所有用户立即升级,以保障生产环境的系统稳定与数据安全。 下载 1.keys cmos-cache包
redisCacheService.keys(String pattern);
2.scan方法
public static Set getAllKey(String match,int count){ //返回集 Set binKeys = new HashSet<>(); //封装scan查询参数 ScanParams param = new ScanParams().match(match).count(count); //获取查询对象 RedisCacheServiceImpl redisCacheSer = (RedisCacheServiceImpl)RedisCacheService; JedisCluster jedisClu = redisCacheSer.getJedisCluster(); //getClueterNodes获取集群节点,从各个集群中获取值进行遍历 jedisClu.getClusterNodes().values().stream().forEach(pool->{ boolean done = false;// String cur = "0";//游标,以0开始,返回0代表一次结束 try(Jedis jedisNode = pool.getResource()){ while(!done){ ScanResult scanResult = jedisNode.scan(cur,param); cur = scanResult.getStringCursor(); if("0".equals(cur){done=true}; List result = scanResult.getResult(); result.foreach(data->{binKeys.add(data)}); } } }); return binKeys; }

相关文章