Redis 缓存更新策略
我们知道缓存的数据通常都是有生命周期的,需要做一些定期更新或者删除,从而保证内存空间在一个可控的范围内。
Redis缓存更新策略主要有三种:
1、LRU/LFU/FIFO算法剔除:例如maxmemory-policy
当Redis memory 达到最大值的时候,首先关注的是过期的数据,通过删除策略来达到保护内存的效果。这种方式只需要关注缓存的策略配置,不需要关心具体的每一个key 到底是怎么过期的,每一个key 是到底怎样被删除的
2、超时剔除:例如 expire
对于Redis 来说实际上就是设置过期时间
比如存储一个用户信息,我将它缓存起来了,我将它设置半个小时的超时时间,半个小时之内,任何访问 或者请求 都会从缓存中去拿结果,
然后来保证性能,而且可以降低后台的负载。
有一个问题就是说,如果在这个缓存期间,有一些用户信息更新了,而且用户更新了非常重要的信息,那你将要怎么办。对于这种expire来说就不是很好
对于一些说明,缓存在Redis中,暂时的不一致对于用户来说,是可以接受的,因为我们要保证性能。
3、主动更新:开发控制生命周期
比如金融信息,需要开发一些业务代码主动去更新缓存,或者更新用户信息的时候,发一条消息或者触发一个事件来主动剔除或者回写更新用户信息,
来实现缓存的一致性。不过这不是完全的强一致性,而是最终一致性。
策略|一致性|维护成本
--|:--:|--:
LRU/LIRS算法剔除 |最差 |低
超时剔除 |较差 |低
主动更新 |强 |高
最佳实战:
1、低一致性:最大内存和淘汰策略
2、高一致性:超时剔除和主动更新结合,最大内存和淘汰策略兜底
网友评论