普通情况和高并发时,Redis缓存和数据库怎么保持一致?

普通情况和高并发时,Redis缓存和数据库怎么保持一致?

Q:缓存和数据库怎么保持一致?
A:绝对不可能保持一致的,在实际业务开发中,有一些方案可以做取舍。

实际业务中,疑问点主要有:

  1. 是先更新Redis还是先更新Mysql?
  2. 是Redis和Mysql都更新,还是只更新Mysql?
  3. Mysql或Redis其中一个更新失败,该业务要算作失败吗?需要回滚吗?

这是我根据实际业务开发经验,总结的操作方案图: 在这里插入图片描述

普通情况

思路

仅保证数据库是完整有效的数据,有变动后就删除Redis,不一致的结果都属于延迟的情况。但是当数据变动后,都需要访问数据库至少一次来更新到缓存。

新增

  1. Mysql新增数据,失败即失败
  2. Redis无操作

编辑

  1. Mysql修改数据,失败即失败
  2. Redis删除数据,失败即失败

删除

  1. Mysql删除数据,失败即失败
  2. Redis删除数据,失败即失败

获取

  1. 从Redis获取,就有返回
  2. 从Mysql获取,有就更新到Redis,返回

高并发时

思路

需要保证数据库和Mysql是完整有效的数据,有变动时需要同步修改Redis,不一致的结果都属于延迟的情况。当数据变动后,无需访问数据库。

新增

  1. Mysql新增数据,失败即失败
  2. Redis新增数据,失败即失败

编辑

  1. Mysql修改数据,失败即失败
  2. Redis修改数据,失败即失败

删除

  1. Mysql删除数据,失败即失败
  2. Redis删除数据,失败即失败

获取

  1. 从Redis获取,有就返回,无就返回无

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-04-06 20:12:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-06 20:12:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-06 20:12:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-06 20:12:01       20 阅读

热门阅读

  1. Vue 自定义菜单、tabBar效果

    2024-04-06 20:12:01       14 阅读
  2. C++智能指针2——unique_ptr和weak_ptr

    2024-04-06 20:12:01       14 阅读
  3. 【leetcode面试经典150题】14.加油站(C++)

    2024-04-06 20:12:01       14 阅读
  4. Vue3实现图片懒加载

    2024-04-06 20:12:01       16 阅读
  5. leetcode删除有序数组中的重复项

    2024-04-06 20:12:01       15 阅读
  6. 【趣味学算法】13_素数

    2024-04-06 20:12:01       14 阅读