1. 选择合适的内存管理策略:Redis提供了6种内存淘汰策略(volatile-lru、allkeys-lru、volatile-lfu、allkeys-lfu、volatile-random、allkeys-random、noeviction),根据业务场景选择合适的策略。例如,对于写多读少的场景,可以使用allkeys-lru策略来淘汰最近最少使用的键值。
2. 优化数据结构:使用Hash、List、Set等复杂数据结构代替String,能显著减少内存占用和提高查询效率。例如,将用户属性存储为Hash结构,而不是多个String键。
CSDN博客
Redis缓存穿透:指查询一个不存在的数据,大量的空请求打到数据库上,造成数据库压力。解决方案:1)对空值也进行缓存,设置短TTL;2)使用布隆过滤器,提前判断key是否存在;3)接口层做参数校验。
掘金文章
缓存雪崩:大量缓存同时失效,导致请求全部打到数据库。解决方案:1)设置不同的TTL,避免同时失效;2)使用二级缓存;3)加互斥锁,单机用Mutex,分布式用Redis分布式锁;4)降级策略。
阿里云开发者社区
Redis慢查询优化:通过slowlog get 10查看慢查询命令,然后分析优化。常见慢命令:keys *(避免使用)、smembers(数据量大时慢)、hgetall(用hmget代替)。
Pipeline批量操作:一次性发送多条命令,减少网络RTT。例如Java客户端:pipeline = jedis.pipelined(); pipeline.set("key", "value"); pipeline.sync();
博客园
连接池优化:设置合理的maxTotal、maxIdle、minIdle,避免频繁创建销毁连接。配置示例:JedisPoolConfig config = new JedisPoolConfig(); config.setMaxTotal(200); config.setMaxIdle(50);
知乎专栏
持久化策略:对于读多写少场景,使用AOF + RDB结合;写多场景只用AOF(everysec策略)。避免主从复制时从库fork阻塞。
分片集群:使用Redis Cluster或Codis/Twemproxy,实现水平扩展。单机QPS可达10w+,集群可达百万级。
腾讯云社区
热点key问题:单个key访问过于频繁导致单节点压力过大。解决方案:1)本地热点缓存;2)key分散:key拆分成多个;3)使用Proxy层做请求分散。
华为云开发者
FAQ:
Q: Redis缓存穿透怎么解决?
A: 缓存空值、使用布隆过滤器、接口参数校验。
Q: 缓存雪崩的预防措施?
A: 随机TTL、二级缓存、互斥锁、限流降级。
Q: 如何监控Redis性能?
A: 使用info command、slowlog、latency命令,结合Prometheus+Grafana监控。
Q: 大key怎么处理?
A: 使用scan代替keys,redis-cli --bigkeys检查,拆分大key。