1. 使用合理的TTL设置,避免缓存雪崩:为高频访问的数据设置合适的过期时间,比如热门商品信息TTL设置为300秒,结合懒删除和主动刷新机制,确保数据新鲜度同时减少数据库压力。
高频缓存穿透优化
2. 缓存穿透解决方案:对于不存在的数据,使用布隆过滤器预判,避免无效查询直击数据库;同时设置空值缓存,TTL短至60秒,防止恶意攻击。
热点key处理
3. 热点key加锁互斥:对高频热点key,使用分布式锁(如Redlock)或本地mutex,确保只有一个请求回源,减少重复加载;或者数据分片预热多份副本。
内存优化技巧
4. 内存高效利用:选择合适的data结构,如String存JSON,Hash存对象字段,减少序列化开销;开启内存碎片整理,定期执行memory purge命令。
连接池与集群
5. 连接池配置:设置jedis或lettuce连接池最大连接数为CPU*10,最大空闲连接数为CPU*5;使用Redis Cluster分片高频数据,均匀负载。
异步更新策略
6. 异步双写:写操作异步更新缓存,使用消息队列如Kafka解耦,读操作优先缓存命中,提升QPS从1w到10w+。
监控与调优
7. 监控指标:实时关注命中率>90%、QPS峰值、内存使用率<80%;使用slowlog分析慢查询,pipeline批量操作减少RTT。
预热与失效策略
8. 缓存预热:系统启动时批量加载高频数据到Redis,避免冷启动雪崩;失效时随机偏移TTL,如基数300s+随机[-30s,30s]。
FAQ
Q: 高频缓存如何避免雪崩?
A: 设置阶梯TTL、热点隔离、使用Sentinel高可用。
Q: 什么情况下用本地缓存如Caffeine?
A: 超低延迟读如用户信息,结合Redis做二级缓存。
Q: Redis内存满了怎么处理?
A: 配置allkeys-lru淘汰策略,监控并扩容集群节点。
Q: 如何测试缓存策略效果?
A: 用jmeter压测QPS、RT,观察命中率和DB压力变化。