当前位置:Gxlcms > 数据库问题 > 分布式缓存数据库一致性问题

分布式缓存数据库一致性问题

时间:2021-07-01 10:21:17 帮助过:27人阅读

void write(String key,Object data){ redis.delKey(key); db.updateData(data); Thread.sleep(1000); redis.delKey(key); }

为什要休眠1秒钟?为了将这1秒内造成的脏数据删除,可能有线程读取到了更新前的旧数据还未来得及写入缓存

休眠的时间多少如何确定?评估自身项目读数据业务逻辑的耗时,在这基础了加100ms即可。可以确保脏数据已经写入缓存中

读写分离怎么办?

  也是采用延时双删策略,休眠时间确保完成主从同步

为了避免休眠造成吞吐量降低,可以将第二次删除作为异步操作

第二次删除失败怎么办?

  删除在更新期间写入缓存的旧值失败

  解决方案:将需要删除的key发送到消息队列,然后自己消费消息,获得需要删除的key,继续重试删除操作,直到成功。

先更新数据库后删缓存

  即Cache Aside Pattern,即缓存旁路模式

  失效:应用程序先从缓存中取数据,没有取到,则从数据库中取数据,成功后,放到缓存中

  命中:应用程序从缓存中渠道数据,然后返回

  更新:先把数据存到数据库中,成功后,再删除缓存

分布式缓存数据库一致性问题

标签:怎么   项目   分布式   评估   style   缓存数据库   命中   主从   sleep   

人气教程排行