zoukankan      html  css  js  c++  java
  • Redis笔记-高并发下缓存与数据库双写如何保证一致

    先删缓存还是先改数据库?

    如果先修改数据库,再删除缓存,有可能数据库修改成功了,但是缓存删除失败
    如果先删除缓存,再修改数据库,如果删除缓存成功,数据库修改失败,第二个请求发现缓存没数据,从数据库读取后放入缓存中,正常情况下不会有问题

    高并发下的双写不一致问题

    第一个请求数据发生变更,先删除了缓存,然后要去修改数据库,此时还没来得及去修改;
    第二个请求过来去读缓存,发现缓存空了,去查询数据库,查到了修改前的旧数据,放到了缓存中;
    第三个请求读取缓存中的数据 (此时第一个请求已经完成了数据库修改的操作)。完了,数据库和缓存中的数据不一样了。。。。

    解决方案

    只有在对同一数据高并发读写时才有可能出现上面的情况,导致数据库和缓存不一致
    对同一数据读写进行串行化,我们在程序中维护一组队列,读写数据时先对数据哈希取余,路由到对应的队列
    每个队列对应一个线程,串行读写操作

    参考:
    https://www.cnblogs.com/wlwl/p/11601632.html

  • 相关阅读:
    团队项目-需求分析报告
    团队项目-选题报告
    第一次结对编程作业
    第一次个人编程作业
    软件工程作业(一)
    期末总结
    第04组 Beta冲刺(2/5)
    第04组 Beta冲刺(3/5)
    第04组 Beta冲刺(4/5)
    第04组 Beta冲刺(5/5)
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/14039070.html
Copyright © 2011-2022 走看看