keys:全量遍歷鍵,用來列出所有滿足特定正則字串規則的key,假設redis此時正在生產環境下,使用該指令就會造成隱患,當redis資料量比較大時:
keys會一次回傳所有符合條件的key,所以會造成redis的卡頓。
SCAN迭代器是基於遊標的,需使用上一次的遊標來繼續先前的迭代過程。使用遊標0作為起點,執行新的遍歷操作並且不斷迭代,直到指令返回遊標0完成整個遍歷。
此指令並不保證每次執行都會傳回某個給定數量的元素,甚至會傳回0個元素,但只要遊標不是0,程式都不會認為SCAN指令結束,但傳回的元素數量大機率符合count參數。另外,SCAN支援模糊查詢。
1.keys cmos-cache套件
redisCacheService.keys(String pattern);
2.scan方法
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的詳細內容。更多資訊請關注PHP中文網其他相關文章!