Skip to content

Redis 如何保证数据一致性的问题?

  1. 先更新数据库,在更新缓存。(先读数据库,数据库中没有再去读缓存,写的时候先写数据库,再将数据库的数据写入到缓存)。缓存可能会更新失败,读取到老的数据从而产生数据不一致问题
  2. 先删除缓存,在更新数据库。当并发量高的时候,数据库的写操作可能还没有来得及提交数据,此时另外一个线程读取到数据还是会产生()就是先操作数据库还是先操作缓存的问题延迟双删的方案先删除缓存,在去更新数据库,然后休眠多少毫秒(这个需要程序员去预估)在删除缓存这样等下次请求进来的时候缓存中没有数据,就会读取数据库并重新写入缓存
  • 先更新数据库, 在去更新缓存
    • 问题: 更新数据库之后,还没有更新缓存之前。数据是会有不一致的情况发生
  • 先更新缓存,在更新数据库
    • 问题: 在多线程环境下,A 线程修改了缓存去改数据库的途中, B 线程再次修改了缓存。还是会有不一致问题
  • 先删除缓存,在更新数据库
    • 问题: 在读写并发的情况下,还是会有不一致的问题
  • 先更新数据库,在删除缓存 (推荐)
    • 缓存的写入速度,相对比数据库的写入速度要快。

    • 问题: 在删除缓存的途中,这一个时间间隙还是存在不一致。
    • 不管是哪一种解决方案都 不可能存在实时的一致性。 如果一定要保证实时性,那么建议不要去使用 Redis 缓存。

waitingresult.com