记一次生产环境上从redis亿级缓存中批量删除key
场景:由于之前第一个版本快速迭代,同事写redis的时候,没有设置超时时间,导致redis上线两个月之后,发现内存在一直在涨,故需要清除redis中没有设置超时时间的key
方案:大家都知道生产环境不能使用keys命令来遍历,这可能会造成redis阻塞,cpu暴涨100%等情况产生,特别是在集群环境中存储量特别大的时候,上面所述现象尤为常见;一般在亿级缓存数据批量删除时,使用redis scan批量删除key尤为有效
一、添加maven依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
二、网上常见的scan模糊匹配批量删除key(游标不移动,错误方法)
这种方法有个问题,那就是没法移动游标,无法全局扫描redis集群中所有匹配的key
public void scan(String pattern, Consumer<byte[]> consumer,Long count) {
this.stringRedisTemplate.execute((RedisConnection connection) -> {
try (Cursor<byte[]> cursor = connection.scan(ScanOptions.scanOptions().match