如何保证缓存一致性?

参考资料:《Redis开发与运维》

何为缓存不一致?

缓存层与存储层在一定时间窗口内存在数据不一致的情况,称此为缓存不一致。

缓存中的数据通常是有生命周期的,需要在指定的时间后更新或删除,这样就可以保证缓存空间在一个可控的范围之内。Redis对此提供了一些策略来更新数据。

算法剔除

Redis提供了一些更新算法,LRU、LFU等等。

使用场景:通常应用于缓存使用量超过了预设的最大值的时候,对现有的数据进行剔除。例如Redis使用maxmemory-policy配置了内存的最大使用值。

一致性较差,但是运维成本低,只需简单配置即可。

超时剔除

使用场景:通过给缓存数据设置过期时间,让其在过期后自动删除。

一致性较差(如果应用方接受在一定时间窗口内缓存数据不一致),运维成本低,设置过期时间即可。

主动更新

使用场景:应用方对数据一致性要求比较高,需要在真实数据更新后,立即更新缓存中的数据。(可以借助MQ解耦)

一致性较高,运维成本也高。需要对主动更新机制进行代码开发。

最佳实践

1.低一致性业务,直接配置maxmemory-policy即可,或设置过期时间。

2.高一致性业务,超时剔除+主动更新联合使用,已确保在主动更新失败的情况下,缓存最终由于过期依然会更新数据。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章