Redis 作为内存数据库,通过将热点数据加载到内存实现毫秒级响应,典型应用场景包括:会话存储、计数器、限流、分布式锁、缓存穿透防护。其高性能源于:基于内存操作、单线程模型(避免上下文切换)、IO 多路复用。
1. 数据结构选型:
1. 字符串(String):存储简单键值对(如用户 token)
2. 哈希(Hash):存储对象数据(如用户信息,支持部分字段更新)
3. 有序集合(Sorted Set):实现排行榜、延迟队列
4. 布隆过滤器(Bloom Filter):解决缓存穿透问题
1. 缓存策略优化:
1. 过期策略:采用 “惰性删除 + 定期删除” 结合,设置合理 TTL(避免缓存雪崩)
2. 更新策略:写操作时选择 “Cache Aside”(先更数据库,再删缓存)或 “Write Through”(同步更新缓存)
3.分片策略:大规模数据采用哈希分片(如按用户 ID 取模分配到不同 Redis 节点)
1.缓存穿透:查询不存在的数据导致请求直达数据库→解决方案:布隆过滤器拦截无效 KEY,缓存空值(设置短期 TTL)
2.缓存击穿:热点 KEY 过期瞬间大量请求穿透→解决方案:互斥锁(Redis SETNX)、热点数据永不过期
3.缓存雪崩:大量 KEY 同时过期或 Redis 集群宕机→解决方案:KEY 过期时间加随机值、Redis 集群高可用(主从 + 哨兵)、降级熔断(Hystrix)
4. 数据一致性:数据库与缓存数据不一致→解决方案:最终一致性方案(异步更新缓存)、分布式事务(Redlock)
5. 禁用持久化(仅缓存场景),或选择 RDB 模式(性能优于 AOF)
6. 调整内存淘汰策略(如allkeys-lru优先淘汰最近最少使用数据)
7. 批量操作使用pipeline减少网络开销
8. 避免大 KEY(拆分大型哈希 / 列表,单个 KEY 体积控制在 10KB 内)