使用redisTemplate的scan方式刪除批量key問題
更新時間:2023年12月20日 08:52:11 作者:bat在等我
這篇文章主要介紹了使用redisTemplate的scan方式刪除批量key問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
redisTemplate的scan方式刪除批量key
/** * 刪除指定前綴的一系列key * * @param pattern 匹配keys的規(guī)則 */ public void deleteKeysByScan(String pattern) { long start = System.currentTimeMillis(); LOGGER.error("清理{}類外呼記錄緩存的定時任務開始執(zhí)行", pattern); String param = pattern + "*"; Set<String> keys = this.getValuesForStringByScan(param); redisTemplate.delete(keys); LOGGER.error("清理{}類外呼記錄緩存的定時任務執(zhí)行結束,耗時:{}", pattern, (System.currentTimeMillis() - start)); } /** * 獲取匹配的所有key,使用scan避免阻塞 * * @param patten 匹配keys的規(guī)則 * @return 返回獲取到的keys */ public Set<String> getValuesForStringByScan(String patten) { return redisTemplate.execute(connect -> { Set<String> binaryKeys = new HashSet<>(); Cursor<byte[]> cursor = connect.scan(new ScanOptions.ScanOptionsBuilder().match(patten).count(200000).build()); while (cursor.hasNext() && binaryKeys.size() < 200000) { binaryKeys.add(new String(cursor.next())); } return binaryKeys; }, true); }
Java使用RedisTemplate模糊刪除key
Redis模糊匹配批量刪除操作,使用RedisTemplate操作:
public void deleteByPrex(String prex) { Set<String> keys = redisTemplate.keys(prex); if (CollectionUtils.isNotEmpty(keys)) { redisTemplate.delete(keys); } }
prex為迷糊匹配的key,如cache:user:*
這里需要判斷keys是否存在,如果一個都匹配不到會報錯:
ERR wrong number of arguments for 'del' command
當然,如果要直接在linux里面操作的話,在命令行執(zhí)行以下命令:
redis-cli keys "keys" | xargs redis-cli del
keys 是要匹配的規(guī)則,和上面的prex一樣。
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
一文解決pom.xml報錯Dependency "xxx" not f
我們在使用maven進行jar包管理時有時會遇到pom.xml中報錯Dependency “XXX” not found,所以在本文中將給大家介紹一下pom.xml報錯Dependency "xxx" not found的解決方案,需要的朋友可以參考下2024-01-01Java實現(xiàn)指定線程執(zhí)行順序的三種方式示例
這篇文章主要介紹了Java實現(xiàn)指定線程執(zhí)行順序的三種方式,包括通過共享對象鎖加上可見變量,通過主線程Join()以及通過線程執(zhí)行時Join()等三種實現(xiàn)方法,需要的朋友可以參考下2019-01-01