Redis与MySQL数据不一致问题
Redis与MySQL数据不一致
- 起因
- 解决办法
- 一、使用Redis键过期功能模拟定时删除(临时办法)
- 二、编写Shell脚本,使用CRON定时任务(长久、最可靠)
- 1.创建 redis_delete_key.sh
- 2. 给脚本执行权限
- 3.设置CRON定时任务
起因
日常维护中,发现页面数据与数据库不一致
数据库
页面
解决办法
一、使用Redis键过期功能模拟定时删除(临时办法)
# 连接到Redis服务器redis-cli# 设置键并同时设置过期时间SET sys_config:dataReport_allNumber "your_value" EX 300# 或者如果键已存在EXPIRE sys_config:dataReport_allNumber 300# 验证设置TTL sys_config:dataReport_allNumber# 这会返回剩余的秒数,确认过期时间已设置成功
二、编写Shell脚本,使用CRON定时任务(长久、最可靠)
1.创建 redis_delete_key.sh
备注:脚本不要放在挂载磁盘上,最好放在/home,/data上。放在挂载磁盘,会导致定时任务找不到脚本文件
#!/bin/bash# 设置Redis密码环境变量
export REDISCLI_AUTH="redis@123.com"# 打印开始时间
echo "=== Starting Redis cleanup script at: $(date '+%Y-%m-%d %H:%M:%S') ==="# 删除指定的Redis键并记录结果
echo "Deleting sys_config:dataReport_allNumber..."
redis-cli -h 127.0.0.1 -p 6379 DEL sys_config:dataReport_allNumberecho "Deleting sys_config:dataReport_yesterdayNumber..."
redis-cli -h 127.0.0.1 -p 6379 DEL sys_config:dataReport_yesterdayNumberecho "Deleting sys_config:dataReport_todayWaitNumber..."
redis-cli -h 127.0.0.1 -p 6379 DEL sys_config:dataReport_todayWaitNumber# 取消环境变量(可选,因为脚本结束后环境变量自动失效)
unset REDISCLI_AUTH# 打印完成时间
echo "=== Script completed at: $(date '+%Y-%m-%d %H:%M:%S') ==="# 空行,让日志更易读
echo ""
2. 给脚本执行权限
chmod +x redis_delete_key.sh
3.设置CRON定时任务
#编辑定时任务
crontab -e
#编辑内容
59 7 * * * /home/delete_redis_keys.sh >> /tmp/redis_delete.log 2>&1
59 11 * * * /home/delete_redis_keys.sh >> /tmp/redis_delete.log 2>&1
59 17 * * * /home/delete_redis_keys.sh >> /tmp/redis_delete.log 2>&1
06 9 * * * /home/delete_redis_keys.sh >> /tmp/redis_delete.log 2>&1
#保存退出
:wq