redis獲取所有key的方法
keys:全量遍歷鍵,用來列出所有滿足特定正則字符串規(guī)則的key,假設(shè)redis此時正在生產(chǎn)環(huán)境下,使用該命令就會造成隱患,當(dāng)redis數(shù)據(jù)量比較大時:
keys會一次性返回所有符合條件的key,所以會造成redis的卡頓。
SCAN是一個基于游標(biāo)的迭代器,需要基于上一次的游標(biāo)延續(xù)之前的迭代過程。SCAN以0作為游標(biāo),開始一次新的迭代,直到命令返回游標(biāo)0完成一次遍歷。
此命令并不保證每次執(zhí)行都返回某個給定數(shù)量的元素,甚至?xí)祷?個元素,但只要游標(biāo)不是0,程序都不會認(rèn)為SCAN命令結(jié)束,但是返回的元素數(shù)量大概率符合count參數(shù)。另外,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查詢參數(shù)
ScanParams param = new ScanParams().match(match).count(count);
//獲取查詢對象
RedisCacheServiceImpl redisCacheSer = (RedisCacheServiceImpl)RedisCacheService;
JedisCluster jedisClu = redisCacheSer.getJedisCluster();
//getClueterNodes獲取集群節(jié)點,從各個集群中獲取值進(jìn)行遍歷
jedisClu.getClusterNodes().values().stream().forEach(pool->{
boolean done = false;//
String cur = "0";//游標(biāo),以0開始,返回0代表一次結(jié)束
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;
}到此這篇關(guān)于redis獲取所有key的方法的文章就介紹到這了,更多相關(guān)redis獲取所有key內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis快速實現(xiàn)分布式session的方法詳解
Session是客戶端與服務(wù)器通訊會話跟蹤技術(shù),服務(wù)器與客戶端保持整個通訊的會話基本信息。本文主要介紹了Redis快速實現(xiàn)分布式session的方法,感興趣的可以學(xué)習(xí)一下2022-01-01
如何保證Redis與數(shù)據(jù)庫的數(shù)據(jù)一致性
這篇文章主要介紹了如何保證Redis與數(shù)據(jù)庫的數(shù)據(jù)一致性,文中舉了兩個場景例子介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
Redis基本數(shù)據(jù)類型Zset有序集合常用操作
這篇文章主要為大家介紹了redis基本數(shù)據(jù)類型Zset有序集合常用操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
從原理到實踐分析?Redis?分布式鎖的多種實現(xiàn)方案
在分布式系統(tǒng)中,為了保證多個進(jìn)程或線程之間的數(shù)據(jù)一致性和正確性,需要使用鎖來實現(xiàn)互斥訪問共享資源,然而,使用本地鎖在分布式系統(tǒng)中存在問題,這篇文章主要介紹了從原理到實踐分析?Redis?分布式鎖的多種實現(xiàn)方案,需要的朋友可以參考下2024-07-07

