Redis实战案例4-缓存更新策略

1. 缓存更新策略

缓存中的数据一致性问题(数据库更新数据,而Redis存的是旧数据)
内存淘汰策略:当内存很充足时,很长时间无法淘汰数据,所以很难控制淘汰,一致性差;
超时剔除:取决于TTL大小,可以达到控制目的,但是在TTL时间内也可能存在数据库更新从而Redis中变成旧数据;
主动更新:也就是同时修改Redis和数据库的数据;

Redis实战案例4-缓存更新策略_第1张图片

2. 主动更新策略

第二种:维护复杂,开发成本大;
第三种:维护异步任务难度大,要实时监控缓存中的变化;其次是一致性难以保证,如果缓存中已经存储了很多数据,但是还没有触发异步更新,这段时间内的缓存和数据库是不一致,当缓存宕机时,此时数据就会彻底丢失;

Redis实战案例4-缓存更新策略_第2张图片
Redis实战案例4-缓存更新策略_第3张图片

这里分析一下先操作缓存还是先操作数据库

  1. 先删除缓存,再操作数据库

正常情况:
Redis实战案例4-缓存更新策略_第4张图片
异常情况(未加锁):这种情况出现的频率高

Redis实战案例4-缓存更新策略_第5张图片

  1. 先操作数据库,再删除缓存

正常情况:
Redis实战案例4-缓存更新策略_第6张图片
异常情况:这种情况出现的频率低,两个线程并行执行,且线程1查询缓存时恰好失效,同时查完数据库去写缓存,这里读写缓存的操作非常快。这时出现另一个线程2更新数据库,而数据库的读写操作较Redis缓存读写慢很多,所以数据库更新完毕之后再写缓存的概率极其低;
所以在概率的角度来选择也是先操作数据库,再删除缓存,并且可以再加一个超时剔除策略;

Redis实战案例4-缓存更新策略_第7张图片
Redis实战案例4-缓存更新策略_第8张图片

你可能感兴趣的:(Redis,redis,缓存,数据库)