数据库与缓存双写一致

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

三种更新策略:

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

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

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

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

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

    解决方案:延时双删策略

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

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

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

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

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

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

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

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

参考文章:DBAplus社群公众号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值