从keys到SCAN:Redis批量删除的进化之路
标签:Redis、批量删除、前缀匹配、性能优化
一、痛点分析:为什么需要批量删除指定前缀的键?
在 Redis 使用过程中,我们经常会遇到这样的场景:
- 需要对某一类数据进行清理,例如用户会话、缓存数据等,而这些数据通常以某种前缀命名(如
user:session:*
、cache:data:*
)。 - 如果直接通过
redisTemplate.delete(key)
删除单个键,需要手动指定所有键,效率极低且不可维护。 - 如果使用
redisTemplate.keys(prefix + "*")
查找并删除,虽然简单,但在键数量庞大的情况下(如百万级),会导致 Redis 服务阻塞,甚至引发宕机风险。
因此,我们需要一种高效、安全的方法,能够根据指定前缀批量删除键,同时避免性能问题。
二、解决方案:三种方法详解
以下是三种常见的实现方式,分别基于 keys
、SCAN
和 Lua 脚本。
方法 1:使用 keys
查找并删除
实现代码:
// 获取 RedisTemplate