缓存中的数据如何和数据库保持一致性
1、双写模式
双写模式就是先写入数据库再写入缓存。
但在高并发情况下容易出现脏数据,但数据最终还会保持一致性。
image.png
2、失效模式
失效模式就是当我更新数据库数据时直接删除对应的缓存,当客户读取数据时再写入缓存一份即可。这种方式相对简单,而且使用比较频繁。
image.png
3、数据一致性问题总结:
image.png
其实在开发过程中:只要在加缓存时添加过期时间,基本都能满足大部分的需求,如果想避免脏数据,可以使用读写锁,但一般没必要。
我们还可以使用阿里的一个中间件Canal来解决数据库和缓存的数据一致性问题:
使用Canal保障数据一致性问题:
image.png
canal是阿里的一个中间件,相当于是mysql 的一个从数据库,当主数据库发生数据变化时变会触发canal。很像之前我们使用的mycat进行数据库的读写分离。
我们可以使用canal监听数据库的变换,当数据发生改变时进行redis的读写或者删除。这样可以让业务更加简单,我们只需要关注数据库即可。
canal还可以使用到推荐系统中:比如淘宝、京东首页会根据用户的不同首页显示不同的内容,我们可以使用canal监听访问记录表或者商品信息表的变化,通过calnal进行监听,并进行实时分析,将分析结果放入到推荐表中,然后实时展现给客户。
但只要不是特别大型的系统,不需要进行如此复杂的架构!!!!!
网友评论