生产环境一般会屏蔽掉keys命令,但是有时会用到这个命令,比如刷新缓存,会把相同特定前缀的key都删除掉,如果没有keys命令,怎么进行删除呢?
通过Cursor获取要删除的key,例如key的前缀是xxx:prefix:xxx:
ScanOptions options = ScanOptions.scanOptions().match("xxx:prefix:xxx:*").count(1000)
.build();
Cursor<String> cursor = (Cursor<String>) redisTemplate.executeWithStickyConnection(
redisConnection -> new ConvertingCursor<>(redisConnection.scan(options),
redisTemplate.getKeySerializer()::deserialize));
cursor.forEachRemaining(key -> {
redisTemplate.delete(key);
});
.count(1000)
中的1000是步进值,过小效率会低一些,尽量与数据级匹配些。
redisTemplate.delete(key);
这部分可以替换成自己的代码,可以删除,也可以进行一些别的操作
网友评论