Redis/Jedis - 按模式删除?
通常,我获取密钥集,然后使用查看来删除每个键/值对。
是否可以通过模式删除所有密钥?
结婚
Del sample_pattern:*
通常,我获取密钥集,然后使用查看来删除每个键/值对。
是否可以通过模式删除所有密钥?
结婚
Del sample_pattern:*
对于Jedis来说,“按模式删除”似乎基本上是获取特定模式的所有键,然后循环通过它。
即
Set<String> keys = jedis.keys(pattern);
for (String key : keys) {
jedis.del(key);
}
不建议使用KEYS,因为它在生产中使用时效率低下。请参阅 https://redis.io/commands/keys。此外,比重复调用 jedis.del() 更有效的调用是向 jedis 进行一次调用以删除匹配的键,并传入一组要删除的键。下面给出了更有效的解决方案:
Set<String> matchingKeys = new HashSet<>();
ScanParams params = new ScanParams();
params.match("sample_pattern:*");
try(Jedis jedis = jedisPoolFactory.getPool().getResource()) {
String nextCursor = "0";
do {
ScanResult<String> scanResult = jedis.scan(nextCursor, params);
List<String> keys = scanResult.getResult();
nextCursor = scanResult.getStringCursor();
matchingKeys.addAll(keys);
} while(!nextCursor.equals("0"));
if (matchingKeys.size() == 0) {
return;
}
jedis.del(matchingKeys.toArray(new String[matchingKeys.size()]));
}