应使用 redis-py 的 scan_iter() 配合 DEL 分批删除带前缀 key,禁用 KEYS;结合 APScheduler 实现带异常捕获、日志监控和 TTL 校验的稳定定时清理。

用 redis-py 扫描并删除带前缀的 Key,别直接 KEYS
Redis 的 KEYS 命令在生产环境必须禁用——它会阻塞主线程,数据量大时可能卡住整个实例。正确做法是用 SCAN 游标式遍历,配合 DEL 分批删除。redis-py 的 scan_iter() 方法封装了游标逻辑,比手写 SCAN 更安全。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
r.scan_iter(match="your_prefix:*", count=1000)控制单次扫描数量,count不是精确值,只是提示 Redis 每次尝试返回多少 key,设为 100–1000 较稳妥 - 扫描结果是生成器,不要转成 list 再操作,避免内存爆涨;边迭代边删
- 删除时用
r.delete(*batch)批量删(最多支持 5000 个 key),比逐个delete()快一个数量级 - 如果 key 数量极大(千万级),建议加
time.sleep(0.01)在每批后微延时,减轻 Redis 负载
用 APScheduler 实现可靠定时任务,避开 schedule 的缺陷
Python 的轻量库 schedule 本质是 while 循环 + sleep,在长期运行服务中容易因异常中断、无心跳、不支持持久化而失联。生产级定时清理应选 APScheduler,它支持后台线程/进程、错误自动恢复、可配置 jobstore(如用 SQLite 记录执行状态)。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 初始化时指定
jobstores和executors,例如用SQLAlchemyJobStore防止重启丢任务 - 用
add_job(func, 'interval', minutes=30)设置周期,避免用cron表达式写错时间(比如"0 2 * * *"容易误以为是每天 2 点,其实是 UTC 时间) - 任务函数内必须包
try/except,捕获ConnectionError、TimeoutError等网络异常,否则一次失败会导致整个 scheduler 停摆 - 加日志:每轮清理完打印
len(keys_deleted)和耗时,方便监控是否变慢或漏删
处理带过期时间的 key,别误删正在使用的数据
有些前缀 key 可能是业务动态生成、自带 TTL 的缓存(比如 user:123:token),直接扫删会破坏业务逻辑。不能只看前缀,得确认是否“该删”。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
r.ttl(key)检查剩余过期时间,ttl == -1表示永不过期(可能是配置项),ttl == -2表示 key 不存在(竞态下已被删),这两类需跳过或单独记录 - 更稳妥的做法:约定清理策略,比如只删
ttl 或 <code>ttl (一小时内将过期)的 key,避免一刀切 - 若业务允许,改用
EXPIRE主动续期代替长期存活 key,让自然过期机制接管,定时脚本只做兜底扫描
部署时注意连接池和超时配置,不然定时任务会静默失败
默认 redis.Redis() 连接没有连接池、无超时,高并发扫描时可能耗尽 socket 或卡死在 read 上,表现是任务看似在跑,但 Redis 没动静、日志也不报错。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 显式创建连接池:
pool = redis.ConnectionPool(max_connections=20, socket_timeout=3, socket_connect_timeout=3, retry_on_timeout=True) - 传给 client:
r = redis.Redis(connection_pool=pool),避免每次新建连接 - 关键参数解释:
socket_timeout防卡死,retry_on_timeout自动重试一次,max_connections根据扫描并发度调(单定时任务 10–20 足够) - 上线前用
redis-cli --latency测延时,若 >50ms,需检查网络或 Redis 负载,否则定时任务大概率超时失败
真正麻烦的不是写几行删 key 的代码,而是让这个动作在 Redis 负载波动、网络抖动、key 数量突增时仍稳定执行——连接池、游标分批、异常隔离、可观测性,缺一不可。

















