保证缓存一致性的解决方案
根据业务需求可分为强一致性和最终一致性两种解决方案。
1.强一致性方案
当业务对数据一致性要求较高时,使用该方案。
一般通过降低性能的方式,对读写请求顺序做到可控,以保证在写操作在同步缓存的过程中不产生读操作。
这样在读操作时,读取到的缓存数据一定是数据库中相同的数据。
2.最终一致性
当业务要求只需保证数据的最终一致性,但对可用性要求较高时,使用该方案。
一般通过先修改数据库,再以非即时的方式修改缓存来保证数据的最终一致性。
根据修改缓存方式的不同,有如下方法。
2.1 删除缓存并设置缓存过期时间
在修改数据库成功后,删除原本的缓存数据。这时在读操作未命中缓存数据时,从数据库中更新最新数据。
但是当删除缓存失败或数据库提交不及时时,依然存在数据不一致的意外情况,因此需要给缓存设置过期时间,当意外情况发生时,等待缓存过期后更新缓存数据。
2.2 异步更新缓存
把修改缓存的操作独立出来,通过监听数据库更新的方式(例如订阅binlog日志)异步修改缓存数据。
当更新失败时使用重试机制保证更新成功。
当业务同时对一致性和可用性有较高要求时,根据分布式系统的CAP理论,只有放弃分区容错性来满足要求了。