您的位置:首页 > 数据库

数据库与缓存双写一致

2018-06-02 19:57 260 查看

  说明:给缓存设置过期时间,是保证最终一致性的解决方案。

三种更新策略:

1. 先更新数据库,再更新缓存;注:一般不使用此方式

    1)线程安全:由于网络原因导致数据产生脏数据;

    2)业务场景:写场景多,读场景少,会造成数据未督导,缓存被频繁更新,浪费性能;写入数据库,写入缓存,浪费性能。

2. 先删除缓存,再更新数据库;

    A进行写操作,删除缓存,B请求读,查询数据库得到旧值写入缓存,A将新值写入数据库,会导致不一致情况。

    解决方案:延时双删策略

    先删除缓存->写数据库->休眠(读数据的时长/主从同步延时+几百毫秒),再次删除缓存

3. 先更新数据库,再删除缓存。

    失效:应用程序先从Cache中取数据,没有得到,从数据库中读;

    命中:应用程序从Cache中取数据,渠道后返回

    更新:先写数据到数据库中,成功则让缓存失效

    删除缓存失败的处理方法:

    1)更新数据库数据->缓存因为种种原因删除失败->将需要删除的key发送至消息队列->自己消费消息,获得需要删除的key->继续重试删除操作,直到成功;缺点对业务线代码造成大量的侵入

    2)更新数据库数据->数据库会将操作信息写入binlog日志当中->定于程序提取出所需要的数据及key_>另起一段非业务代码,获得该信息->尝试删除缓存操作,发现删除失败->将这些信息发送至消息队列->重新从消息队列中获得该数据,重试操作

参考文章:DBAplus社群公众号

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: