Redis数据自动无故删除问题排查求助(Telegram Bot主数据库场景)
Redis数据自动删除排查方案
针对你的Telegram Bot数据写入Redis后自动消失的问题,可按以下步骤逐一排查:
检查键的过期设置
写入数据时可能误加了过期参数(如EX/PX),导致键自动过期。- 用
TTL <key>或PTTL <key>查看单个键的剩余存活时间:返回-1表示永不过期,-2表示键已被删除,正数为剩余秒数/毫秒数。 - 批量验证可结合
SCAN 0 MATCH *遍历所有键,逐个检查TTL值。
- 用
排查内存淘汰策略触发
当Redis内存达到maxmemory阈值时,会按配置的淘汰策略自动删除键。- 执行
CONFIG GET maxmemory和CONFIG GET maxmemory-policy,确认内存上限和淘汰规则(如allkeys-lru会删除最近最少使用的所有键,volatile-lru仅删除带过期时间的键)。 - 用
INFO memory查看当前内存使用率,判断是否接近阈值。
- 执行
确认Redis是否意外重启
即使服务器未重启,Redis可能因内存不足、系统OOM Killer、自身崩溃等原因重启。若未开启持久化,重启后数据会全部丢失;若开启持久化,仅恢复到上次快照/日志状态。- 执行
INFO server查看uptime_in_seconds,对比数据丢失时间,判断Redis是否在该时间段内重启过。 - 检查服务器系统日志(如
/var/log/syslog或/var/log/messages),搜索redis相关条目,确认是否有崩溃或重启记录。
- 执行
排查异常命令操作
服务器上可能存在其他进程、定时任务执行了DEL/FLUSHDB/FLUSHALL等删除命令。- 开启慢查询日志:
CONFIG SET slowlog-log-slower-than 0(记录所有命令),之后用SLOWLOG GET查看日志,排查是否有异常删除操作。 - 临时用
MONITOR命令实时监控Redis命令(生产环境慎用,会影响性能),捕捉可疑操作。
- 开启慢查询日志:
检查持久化配置异常
若开启RDB/AOF持久化,配置错误可能导致数据未正确保存,重启后丢失。- 执行
CONFIG GET save查看RDB快照触发规则,CONFIG GET appendonly确认AOF是否开启。 - 用
INFO persistence查看持久化状态,检查是否有快照失败、AOF写入错误等记录。
- 执行
内容的提问来源于stack exchange,提问作者syrok
相关产品推荐
相关产品推荐

