zoukankan      html  css  js  c++  java
  • 缓存和数据库不一致出现的原因及其解决

    cache与db不一致的原因,读与写出现并发。

    理论上,給cache设置过期时间,是保证最终一致性到解决方案。这种方案下,写操作以数据库为准。更新cache失败,只要到了过期时间,后面的读请求会从数据库中读取新值存入cache。不过,实际开发中只设过期时间不足以满足需求,出现3种策略。

    • 先更新DB,再更新cache
    • 先更新DB,再删除cache
    • 先删cache,再更新DB 

    对于第一种策略,开发中遇到比较少,原因如下:

    1. 如果写比读多,读取数据跟不上cache的频繁更新,浪费性能
    2. 如果DB的值需要经过一系列计算写入cache,每次更新DB,都要计算再写入cache,浪费性能

    后面2种策略,开发中体现以下几个场景:

    1. 先更新DB,再删除cache,删除cache失败
    2. 当删除完cache的时候,这时去更新DB,但还没有更新完,另外一个请求来查询数据,发现cache里没有,就去DB里查,再把DB旧数据存入缓存中

    解决方案:

    场景1

    1. 先删除cache,再更新DB,如果删除cache失败,就不更新DB。重试机制,删除cache。

    场景2

    1. 利用消息队列,更新cache

    DB产生新的增删改操作放入队列中,操作执行完发消息给cache,cache数据进行更新。如果中途出现查询,同步等待cache更新完成。

    详细资料可以参考:https://www.cnblogs.com/rjzheng/p/9041659.html

    通常做法:

    写数据只写DB

    更新数据,先更新DB;读数据,先读cache

    cache存热点数据

  • 相关阅读:
    CSS强制换行
    Android 软件开发的盈利模式
    比较Collection 和Collections的区别
    Jsp 中taglib标签的妙用
    常用搜索引擎大全
    Jsp 中登陆界面的实现方法
    Jsp 中JavaScript 和 Java代码的异步执行特点
    Jsp struts 标准配置测试版
    div demo
    多线程模拟银行业务调度系统
  • 原文地址:https://www.cnblogs.com/ivy-xu/p/12357876.html
Copyright © 2011-2022 走看看