我在java中使用jedis进行redis连接。
我想使用 jedis 从 redis 服务器中删除类似的模式键。例如
1. 1_pattern
2. 2_pattern
3. 3_pattern
4. 4_pattern
5. 5_pattern
我们可以使用 del(key),但它只会删除一个键。
我想要 del("*_pattern")
您可以将DEL key [key ...]
命令与KEYS pattern
命令结合使用以获得所需的内容。
例如,您可以像这样使用Jedis执行此操作(伪代码):
// or use "?_pattern"
jedis.del(jedis.keys("*_pattern"));
但请注意,此操作可能需要很长时间,因为数据库中的键数KEYS
是O(N)
哪里,键的数量是哪里,并且对于每个要删除的键,即列表/集/等,它的,哪里是列表/集合/等的长度。N
DEL
O(M)
M
O(P)
P
在这里查看我的答案。
在您的情况下,这是对 deleteKeys("*_pattern"); 的简单调用。
它应该在 redis 中使用正则表达式。在您的代码中:
String keyPattern = "*"+"pattern";
// or String keyPattern = "*_"+"pattern";
Set<String> keyList = jedis.keys(keyPattern);
for(String key:keyList){
jedis.del(key);
}
// 免费的 redis 资源我认为上面的解决方案效果很好。
最有效的方法之一是减少 redis 调用。
String keyPattern = "*"+"pattern";
Set<String> keys = redis.keys(keyPattern);
if (null != keys && keys.size() > 0) {
redis.del(keys.toArray(new String[keys.size()]));
}