在典型的后端系统中,Redis 一般会被用来解决哪些类型的实际问题?
考察说明
考查对 Redis 核心数据结构及典型应用场景的掌握程度。
回答思路
- 【回答框架 1】缓存是 Redis 最核心的应用,用于存储热点数据,如用户会话、商品详情等,以降低数据库压力并提升读取速度。通过设置过期时间和淘汰策略(如 LRU)来控制内存使用。
- 【回答框架 2】分布式锁利用 SETNX 或 Redlock 等机制实现多实例间的互斥控制,用于防止并发冲突,但需注意锁的过期时间与业务执行时间的匹配,避免锁提前失效。
- 【回答框架 3】计数器与限流场景利用 INCR、DECR 等原子操作实现访问计数、库存扣减和接口限流,需配合过期时间防止计数无限增长。
- 【回答框架 4】消息队列(发布订阅或 Stream)适用于简单的异步解耦和轻量级消息传递,但相比专业消息中间件如 Kafka,它缺少持久化和分区消费保障。
- 【回答框架 5】排行榜和附近的人等场景依赖有序集合 ZSet 和地理位置 GEO 数据结构,ZSet 支持按分数排序,适合TopN和排名统计。
- 【关键点 1】查询缓存是 Redis 最常见的应用,配合过期策略能有效降低数据库压力。
- 【关键点 2】分布式锁只提供互斥,不能直接保证业务幂等,还需业务侧唯一约束。
- 【关键点 3】INCR 系列命令天然支持高频计数和限流统计。
- 【关键点 4】ZSet 和 GEO 数据结构适合排序、排名及地理位置需求。
- 【关键点 5】Redis 作消息队列时需权衡其持久性和可靠投递能力的限制。
- 【易错点 1】将 Redis 作为强一致的数据源或主存储,其在容灾和一致性上弱于关系型数据库。
- 【易错点 2】无限使用内存且无清理策略会导致 OOM 崩溃。
- 【易错点 3】把分布式锁的互斥等同于业务幂等处理,忽略唯一标识和状态校验。