Redis缓存失效时间(TTL)设置至关重要,它能防止缓存数据无限期占用内存,导致内存爆满;同时避免用户看到过时数据,确保数据新鲜度。长期维护策略包括:定期监控缓存命中率,动态调整TTL值,根据业务场景分类设置短TTL(如实时数据1分钟)和长TTL(如配置类1小时);结合懒删除和主动刷新机制;使用Redis的EXPIRE命令设置TTL,并通过pipeline批量操作优化性能;监控内存使用,设置maxmemory-policy allkeys-lru策略自动淘汰过期键。
来源1
缓存设置失效时间是必须的,主要有以下几个原因:1、数据必定有更新周期,如果不设置失效时间,用户看到的都是过期数据;2、如果不设置失效时间,缓存可能会一直存在,导致内存不够用;3、很多缓存系统设置失效时间,也是为了防止有人恶意攻击,造成缓存雪崩;所以我们一定要合理的设置失效时间。
来源2
Redis中设置key的失效时间有两种方式:expire和setex,expire是先设置一个key,然后再给这个key添加一个失效时间;而setex是设置key的同时设置失效时间(包含value和失效时间),这两种设置方式都可以实现设置key失效时间的功能。
来源3
在Redis中,我们为缓存设置了过期时间,但是过期时间到了之后,Redis并不会立即删除这个key,而是每次获取这个key时,如果发现它过期了,就删除它,然后再返回空给客户端。如果这个key对应的数据很大,而同时有大量的key过期,此时删除这些key就会造成瞬时压力,我们可以考虑采用异步删除的方式,比如把过期key放入到一个队列中,然后用一个专门的线程来处理这个队列。
来源4
长期维护策略:1. 监控缓存命中率,如果命中率低,考虑延长TTL或优化数据预热;2. 使用Redis的INFO命令定期检查内存使用和过期键数量;3. 针对热点数据设置永久键(无TTL),冷数据设置短TTL;4. 结合业务峰谷期动态调整TTL,避免高峰期缓存失效风暴;5. 脚本自动化清理长期无访问键值。
来源5
缓存雪崩是指因为各种原因在同一时间,大量Redis的Key设置了同样的过期时间,导致在某个时间点,所有的Key同时失效,产生大量的请求打到数据库上去,数据库承受不住,直接宕机。解决办法:1、给缓存设置不同的失效时间;2、缓存预热,将可能大量的访问的数据一次性加载到缓存中;3、分布式缓存下,可以考虑用不同的Redis实例缓存不同的数据。
来源6
Redis的TTL设置命令:SET key value EX 3600 表示设置key 1小时后过期;EXPIRE key 3600 同样设置1小时过期;对于Hash、List等也可以用PEXPIRE设置毫秒级精确过期。长期策略中,建议TTL不超过24小时,避免数据陈旧。
来源7
在实际项目中,我们会根据数据类型设置不同TTL:用户session TTL 30分钟;商品库存 TTL 5分钟(高频更新);配置参数 TTL 1天(低频)。维护时用redis-cli --scan --pattern 'prefix:*' | xargs redis-cli TTL 检查剩余时间,异常键手动清理。
FAQ
Q: 为什么不设置永久缓存?
A: 永久缓存可能导致内存泄漏和数据不一致,TTL确保自动清理。
Q: TTL设置多长合适?
A: 根据业务更新频率,实时数据1-5分钟,静态数据1-24小时。
Q: 缓存穿透怎么处理?
A: 设置空值缓存,TTL短如30秒,并用布隆过滤器拦截无效key。
Q: 内存满了怎么处理?
A: 配置maxmemory和eviction policy如allkeys-lru,优先淘汰不活跃键。