时间:2023-11-01来源:系统城装机大师作者:佚名
keys:全量遍历键,用来列出所有满足特定正则字符串规则的key,假设redis此时正在生产环境下,使用该命令就会造成隐患,当redis数据量比较大时:
keys会一次性返回所有符合条件的key,所以会造成redis的卡顿。
SCAN是一个基于游标的迭代器,需要基于上一次的游标延续之前的迭代过程。SCAN以0作为游标,开始一次新的迭代,直到命令返回游标0完成一次遍历。
此命令并不保证每次执行都返回某个给定数量的元素,甚至会返回0个元素,但只要游标不是0,程序都不会认为SCAN命令结束,但是返回的元素数量大概率符合count参数。另外,SCAN支持模糊查询。
1.keys cmos-cache包
1 | redisCacheService.keys(String pattern); |
2.scan方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public static Set<String> getAllKey(String match, int count){ //返回集 Set<String> 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<String> scanResult = jedisNode.scan(cur,param); cur = scanResult.getStringCursor(); if ( "0" .equals(cur){done= true }; List<String> result = scanResult.getResult(); result.foreach(data->{binKeys.add(data)}); } } }); return binKeys; } |
到此这篇关于redis获取所有key的方法的文章就介绍到这了
2023-11-01
Redis批量删除Key的三种方式小结2023-11-01
Redis实现分布式锁详解2023-11-01
Redis全量同步和增量同步原理Redis使用中不规范的现象 Redis 使用业务场景推荐与建议 如何设计出优雅的key 一、遵循如下几个最佳实践约定 二、尽量避免bigkey 三、使用恰当的数据类型 Redis 缓存在实际应用中的使用建议 使用业务规范...
2023-11-01
一、高可用 什么是高可用 二、Redis持久化 持久化功能 RDB持久化 触发条件 bgsave执行流程 AOF持久化 执行流程 命令追加 文件写入和文件同步 文件重写 文件重写流程 三、RDB和AOF的优缺点 RDB持久化的优缺点 优点 ...
2023-11-01