目前redis缓存更新存在3种主流策略,分别是:内存淘汰、超时剔除、主动更新。
一、介绍
1、内存淘汰
该策略不用自己维护,利用redis的内存淘汰机制,当内存不足时自动淘汰部分数据。下次查询时自动更新缓存。
一致性:差
维护成本:无
2、超时剔除
给缓存数据添加有效时间,到期后自动删除缓存。下次查询时更新缓存。
一致性:一般
维护成本:低(只用编写一个添加时间的代码)
3、主动更新
编写业务逻辑,在修改数据库的同时,更新缓存。
一致性:好
维护成本:高(需要编写整套业务逻辑代码)
二、应用场景
以博客系统为例:
博客系统里面的博客类型,长时间不会改变,即可使用内存淘汰策略。
但是所有博客的list,这种时刻都在改变的就需要使用主动更新策略。
三、使用主动更新时需要考虑的问题
1、删除缓存还是更新缓存?
答:删除缓存,如果每一次更新数据库的同时更新缓存,那么如果用户进行更新数据库操作的次数远大于读数据库的次数。那么此时无效写操作较多。所有尽量选择进行第一次写操作时删除缓存,进行读操作时再更新缓存。
2、如何保证缓存与数据库的操作的同时成功或失败
答:单体系统,将缓存与数据库操作放在一个事务。分布式系统,利用TCC等分布式事务方案
3、先操作缓存还是先操作数据库?
答:都可以,根据实际业务需求调整。