redis等缓存和mysql的数据同步问题解决思路

如何解决redis等缓存和mysql的数据同步问题? 在什么时机存储到mysql呢?

 

一般方式:

先更新数据库,再更新缓存

缺点:会触发分布式事务问题,两步操作必须同时完成

懒加载方式:

先删除缓存,再更新数据库,查询时再添加到缓存中

缺点:高并发情况下有小概率出现将旧数据添加到缓存中

 

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

缺点:基本没什么大问题

 

异步方式:


可以在一段时间后定时存储到mysql.
缺点:这个方案是以前老的方案, 这种情况如果服务器挂了, 有可能会导致数据丢失。

 

可以异步存储数据(再开个进程)。
缺点:这个自己做有点复杂了, 可以交给memcach缓存做。

 

更好的解答:

1.更新到缓存服务,由缓存服务异步更新到mysql。
2.直接更新到mysql,并删除掉缓存服务的数据。

 

比较好的方案::Read/Write Through Pattern

要点:更新数据由缓存服务来做。
Write Back套路,一句说就是,在更新数据的时候,只更新缓存,不更新数据库,而我们的缓存会异步地批量更新数据库。这个设计的好处就是让数据的I/O操作飞快无比(因为直接操作内存嘛 ),因为异步,write backg还可以合并对同一个数据的多次操作,所以性能的提高是相当可观的。

详解 https://coolshell.cn/articles/17416.html

你可能感兴趣的:(数据库)