何时选择Redis:Redis适合高并发读写、低延迟场景,如缓存热点数据、实时排行榜、会话存储、分布式锁和消息队列。当数据访问频繁且对一致性要求不高时优先选Redis;如果需要持久化大量数据或强一致性,转向MySQL或专用数据库。核心经验:用Redis加速现有系统瓶颈,结合关系型数据库互补。
缓存系统
Redis 最常见的应用场景就是作为缓存系统。网站的大部分请求都会被缓存,减少对后端数据库的压力,大大提高网站访问速度和并发访问量。比如:双十一高峰期,电商网站使用 Redis 缓存商品信息,避免数据库被请求打爆。
排行榜
排行榜是 Redis 的经典应用场景之一,利用 Redis 的 Sorted Set 数据结构,可以高效地实现实时排行榜。比如游戏积分榜、直播间礼物榜等。每次有新数据进来,只需要更新 Sorted Set 中的分数,系统就能自动排序。
会话存储
分布式网站中,Session 不能存放在一台服务器上,否则会造成负载不均衡。Redis 是 Session 存储的理想选择,不仅支持高可用,还支持横向扩展。很多大型网站都用 Redis 来存 Session。
分布式锁
在分布式系统中,经常需要对共享资源加锁,比如秒杀活动、库存扣减等。Redis 提供了 SETNX 命令,可以实现高效的分布式锁。很多第三方中间件都基于 Redis 实现了分布式锁功能。
消息队列
虽然 Redis 不是专业的消息队列,但 List 结构可以实现简单的消息队列。比如:聊天室、实时评论等场景。Redis 的 Pub/Sub 也可以实现简单的发布/订阅模式。
地理位置
Redis 3.2 之后提供了 GEO 功能,可以实现附近的人、计算两点距离等功能。外卖、打车等场景都会用到。比如:美团、饿了么都用 Redis GEO 来做商家推荐。
计数器
Redis 的原子性操作 INCR/DECR 非常适合做计数器。比如:浏览量、点赞数、库存等。比数据库 UPDATE count=count+1 效率高几百倍。
FAQ
Q: Redis 什么时候不用做缓存?
A: 当数据冷热分布不明显、读写比例均衡且对一致性要求极高时,不适合用Redis缓存。
Q: Redis 持久化方案选哪个?
A: RDB适合冷备,AOF适合高可靠性,两者结合最佳。
Q: 如何避免 Redis 内存不足?
A: 设置合理的maxmemory和淘汰策略,如allkeys-lru。
Q: Redis 单线程为什么快?
A: 内存操作、无锁竞争,CPU单核利用率高。