> 技术文档 > Redis与MySQL数据不一致问题

Redis与MySQL数据不一致问题


Redis与MySQL数据不一致

  • 起因
  • 解决办法
    • 一、使用Redis键过期功能模拟定时删除(临时办法)
    • 二、编写Shell脚本,使用CRON定时任务(长久、最可靠)
      • 1.创建 redis_delete_key.sh
      • 2. 给脚本执行权限
      • 3.设置CRON定时任务

起因

日常维护中,发现页面数据与数据库不一致

数据库

Redis与MySQL数据不一致问题

页面

Redis与MySQL数据不一致问题

解决办法

一、使用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>&159 11 * * * /home/delete_redis_keys.sh >> /tmp/redis_delete.log 2>&159 17 * * * /home/delete_redis_keys.sh >> /tmp/redis_delete.log 2>&106 9 * * * /home/delete_redis_keys.sh >> /tmp/redis_delete.log 2>&1#保存退出:wq