一、Redis 基础定位全称Remote Dictionary Server远程字典服务器核心特性内存型 NoSQL 键值数据库、单线程 IO 多路复用、高性能、支持持久化、多数据结构、分布式锁 / 消息队列等扩展能力性能指标单机读写 10W QPS远高于 MySQL千级 QPS适用定位辅助缓存中间件不替代数据库分担 DB 压力二、Redis 底层核心原理必懂细节1. 单线程模型高频面试Redis 核心指令执行是单线程避免多线程竞争锁开销网络 IO 使用epoll/kqueueIO 多路复用异步处理海量客户端连接瓶颈不在 CPU而在内存、网络带宽、持久化磁盘 IO多核利用方案Redis6 引入多线程 IO读写网络并发提速。2. 内存存储机制所有数据默认存在内存读写速度极快底层编码不同数据类型自动适配压缩编码节省内存内存淘汰策略内存满时自动清理数据8 种策略电商常用volatile-lru3. 持久化方案防止断电丢数据1RDB 快照持久化机制定时全量生成二进制快照文件.rdb优点文件小、恢复速度快、适合备份缺点两次快照间断电会丢失新写入数据适用定时冷备份。2AOF 追加日志持久化机制每条写命令追加写入日志.aof重启重放命令恢复数据三种刷盘策略always每条命令同步刷盘0 丢失性能最差everysec每秒刷盘最多丢 1 秒数据生产默认no交给操作系统丢失不可控优点数据丢失极少缺点文件体积大重启恢复慢AOF 重写自动合并日志删除无效指令del、过期 key压缩文件。生产搭配RDB AOF 双持久化定时 RDB 做备份AOF 保障低数据丢失。4. 过期淘汰机制惰性删除访问 key 时才判断是否过期过期直接删除定期主动删除后台线程每秒随机采样一批过期 key 清理避免内存堆积内存淘汰 8 种策略表格策略适用场景volatile-lru只淘汰带过期 key优先删最少访问电商生产首选allkeys-lru全部 key 按 LRU 淘汰无过期 key 业务noeviction内存满直接报错不推荐线上三、Redis 7 大基础数据结构 电商实战用途1. String 字符串最常用底层动态字符串 SDS用途普通缓存商品基础信息、用户基础数据、首页热点数据计数器商品浏览量、订单访问次数、接口限流计数分布式锁SET key value NX EX原子锁验证码存储图形验证码、短信验证码设置 5 分钟过期JWT Token 缓存控制过期自动失效命令set / get / incr / expire2. Hash 哈希对象缓存首选底层字典表存储 field-value用途缓存对象用户信息、订单简略信息只更新单个字段不用覆盖整条数据购物车存储hash:userIdfield 商品 id value 购买数量命令hset / hget / hincrby3. List 双向链表用途简单消息队列lpush rpop最新浏览记录lpush 存入商品 idlrange 查询前 10 条延时队列简易缺点无确认机制消息丢失风险高复杂业务改用 MQ。4. Set 无序不可重复集合用途去重统计商品点赞用户、收藏用户、签到用户交集计算同时收藏商品 A、B 的用户黑名单禁止下单用户 IP 集合命令sadd / smembers / sinter5. ZSet 有序集合带分数排序用途排行榜商品销量榜、销售额榜单、积分排名延时任务分数存时间戳定时拉取到期任务限流排序、热点商品排序命令zadd / zrangebyscore / zremrangebyscore6. BitMap 位图极致省内存用途用户签到统计一天 30 天签到仅占用 30bit海量用户状态标记是否浏览、是否下单7. HyperLogLog 基数统计用途统计 UV独立访客亿级用户仅占用 12KB 内存允许极低误差。四、Redis 高级扩展功能后端项目核心落地1. 发布订阅 Pub/Sub作用频道消息广播局限无消息持久化离线丢失消息适用简单实时通知不用于支付、订单可靠消息。2. Lua 脚本原子操作多条命令打包执行全程原子不被打断实战分布式锁释放、库存扣减判断库存 扣减一步完成防止超卖。3. 事务 MULTI/EXEC批量命令打包仅保证批量连续执行不支持回滚不适合强一致性场景。4. StreamRedis5 可靠消息队列完整 MQ 能力消息持久化、消费确认、分组消费用途轻量异步任务、订单消息无 RocketMQ 时替代方案。五、Redis 在电商项目完整落地用处核心业务1. 缓存层减轻 MySQL 压力最核心热点商品缓存首页爆款、分类商品列表过期时间 5 分钟用户信息缓存登录后缓存用户基础数据避免频繁查库订单缓存近期用户订单列表减少分页查 DB字典缓存商品分类、支付渠道、系统常量长期不失效缓存策略缓存预热项目启动加载热点数据缓存穿透布隆过滤器 / 缓存空值缓存击穿互斥锁、热点永不过期缓存雪崩过期时间随机打散、集群扩容。2. 分布式锁高并发必用解决集群多实例并发竞争问题下单扣库存防超卖重复提交拦截防重复下单、重复支付定时任务分布式防重复执行优惠券限量抢购标准原子锁命令redisSET lock:order:1001 uuid NX EX 30Lua 脚本安全释放锁防止误删别人锁。3. 限时数据存储自动过期登录 JWT 缓存过期自动失效图形验证码、短信验证码未支付订单临时状态缓存接口限流计数1 分钟 5 次请求。4. 购物车存储使用 Hash 结构登录用户购物车存入 Redis退出登录同步到数据库。5. 排行榜与统计商品销量 ZSet 排行榜每日 UV、PV HyperLogLog 统计商品点赞、收藏 Set 去重统计。6. 异步轻量消息Stream订单创建后发送消息扣库存、发送短信、生成物流单活动通知、首页实时数据更新。7. 会话共享SpringSession 整合 Redis多服务器集群部署时统一存储用户 Session实现登录无感知负载均衡。六、Redis 集群架构方案生产部署细节1. 主从复制 Master-Slave主节点写从节点全量同步数据从节点分担读请求读写分离故障主节点宕机无法自动切换适合简单读写分离。2. Sentinel 哨兵主从自动故障转移监控主从节点主宕机自动选举新 master提供统一访问地址业务无需感知主从切换适合中小型项目高可用。3. Redis Cluster 分片集群大规模分布式16384 个哈希槽数据分片存储多台主机横向扩容支持海量数据存储每个分片配套主从兼顾分片 高可用大型电商、高并发项目标准方案。七、生产环境核心运维 安全细节1. 内存优化设置maxmemory限制最大内存防止占用服务器全部内存选用volatile-lru淘汰策略大 key 拆分不要存储超 10000 条数据的 Hash/List拆分减少阻塞禁用大键全量查询避免主线程阻塞卡顿。2. 持久化配置线上开启 RDB AOFAOF 刷盘策略everysec平衡性能与数据安全。3. 安全配置设置requirepass强密码客户端连接必须鉴权禁止外网直接访问 6379 端口防火墙仅内网放行禁用危险命令flushall / flushdb / keys *绑定内网 IPbind 127.0.0.1 内网段。4. 性能优化单机拆分冷热数据热点 key 单独实例读写分离读请求走从节点避免长耗时命令keys、hgetall生产只用 scan 迭代遍历Redis6 开启多线程 IO提升网络并发。八、高频问题总结面试重点Redis 为什么快内存存储、单线程无锁竞争、IO 多路复用、高效数据编码。Redis 和 MySQL 区别Redis 内存缓存高性能支持复杂结构MySQL 磁盘持久化强事务存核心业务数据。分布式锁存在什么问题死锁设置过期时间、锁误删Lua 脚本校验持有者、主从切换锁失效Redlock 算法。缓存三大问题解决方案穿透布隆过滤器、缓存空值击穿互斥锁、热点 key 永不过期雪崩过期随机、集群、多级缓存。Redis 适合存什么不适合存什么✅ 热点、临时、计数、排行榜、会话、分布式锁 ❌ 海量冷数据、需要强事务一致性核心订单存 MySQL、超大二进制文件。
Redis 完整详解
一、Redis 基础定位全称Remote Dictionary Server远程字典服务器核心特性内存型 NoSQL 键值数据库、单线程 IO 多路复用、高性能、支持持久化、多数据结构、分布式锁 / 消息队列等扩展能力性能指标单机读写 10W QPS远高于 MySQL千级 QPS适用定位辅助缓存中间件不替代数据库分担 DB 压力二、Redis 底层核心原理必懂细节1. 单线程模型高频面试Redis 核心指令执行是单线程避免多线程竞争锁开销网络 IO 使用epoll/kqueueIO 多路复用异步处理海量客户端连接瓶颈不在 CPU而在内存、网络带宽、持久化磁盘 IO多核利用方案Redis6 引入多线程 IO读写网络并发提速。2. 内存存储机制所有数据默认存在内存读写速度极快底层编码不同数据类型自动适配压缩编码节省内存内存淘汰策略内存满时自动清理数据8 种策略电商常用volatile-lru3. 持久化方案防止断电丢数据1RDB 快照持久化机制定时全量生成二进制快照文件.rdb优点文件小、恢复速度快、适合备份缺点两次快照间断电会丢失新写入数据适用定时冷备份。2AOF 追加日志持久化机制每条写命令追加写入日志.aof重启重放命令恢复数据三种刷盘策略always每条命令同步刷盘0 丢失性能最差everysec每秒刷盘最多丢 1 秒数据生产默认no交给操作系统丢失不可控优点数据丢失极少缺点文件体积大重启恢复慢AOF 重写自动合并日志删除无效指令del、过期 key压缩文件。生产搭配RDB AOF 双持久化定时 RDB 做备份AOF 保障低数据丢失。4. 过期淘汰机制惰性删除访问 key 时才判断是否过期过期直接删除定期主动删除后台线程每秒随机采样一批过期 key 清理避免内存堆积内存淘汰 8 种策略表格策略适用场景volatile-lru只淘汰带过期 key优先删最少访问电商生产首选allkeys-lru全部 key 按 LRU 淘汰无过期 key 业务noeviction内存满直接报错不推荐线上三、Redis 7 大基础数据结构 电商实战用途1. String 字符串最常用底层动态字符串 SDS用途普通缓存商品基础信息、用户基础数据、首页热点数据计数器商品浏览量、订单访问次数、接口限流计数分布式锁SET key value NX EX原子锁验证码存储图形验证码、短信验证码设置 5 分钟过期JWT Token 缓存控制过期自动失效命令set / get / incr / expire2. Hash 哈希对象缓存首选底层字典表存储 field-value用途缓存对象用户信息、订单简略信息只更新单个字段不用覆盖整条数据购物车存储hash:userIdfield 商品 id value 购买数量命令hset / hget / hincrby3. List 双向链表用途简单消息队列lpush rpop最新浏览记录lpush 存入商品 idlrange 查询前 10 条延时队列简易缺点无确认机制消息丢失风险高复杂业务改用 MQ。4. Set 无序不可重复集合用途去重统计商品点赞用户、收藏用户、签到用户交集计算同时收藏商品 A、B 的用户黑名单禁止下单用户 IP 集合命令sadd / smembers / sinter5. ZSet 有序集合带分数排序用途排行榜商品销量榜、销售额榜单、积分排名延时任务分数存时间戳定时拉取到期任务限流排序、热点商品排序命令zadd / zrangebyscore / zremrangebyscore6. BitMap 位图极致省内存用途用户签到统计一天 30 天签到仅占用 30bit海量用户状态标记是否浏览、是否下单7. HyperLogLog 基数统计用途统计 UV独立访客亿级用户仅占用 12KB 内存允许极低误差。四、Redis 高级扩展功能后端项目核心落地1. 发布订阅 Pub/Sub作用频道消息广播局限无消息持久化离线丢失消息适用简单实时通知不用于支付、订单可靠消息。2. Lua 脚本原子操作多条命令打包执行全程原子不被打断实战分布式锁释放、库存扣减判断库存 扣减一步完成防止超卖。3. 事务 MULTI/EXEC批量命令打包仅保证批量连续执行不支持回滚不适合强一致性场景。4. StreamRedis5 可靠消息队列完整 MQ 能力消息持久化、消费确认、分组消费用途轻量异步任务、订单消息无 RocketMQ 时替代方案。五、Redis 在电商项目完整落地用处核心业务1. 缓存层减轻 MySQL 压力最核心热点商品缓存首页爆款、分类商品列表过期时间 5 分钟用户信息缓存登录后缓存用户基础数据避免频繁查库订单缓存近期用户订单列表减少分页查 DB字典缓存商品分类、支付渠道、系统常量长期不失效缓存策略缓存预热项目启动加载热点数据缓存穿透布隆过滤器 / 缓存空值缓存击穿互斥锁、热点永不过期缓存雪崩过期时间随机打散、集群扩容。2. 分布式锁高并发必用解决集群多实例并发竞争问题下单扣库存防超卖重复提交拦截防重复下单、重复支付定时任务分布式防重复执行优惠券限量抢购标准原子锁命令redisSET lock:order:1001 uuid NX EX 30Lua 脚本安全释放锁防止误删别人锁。3. 限时数据存储自动过期登录 JWT 缓存过期自动失效图形验证码、短信验证码未支付订单临时状态缓存接口限流计数1 分钟 5 次请求。4. 购物车存储使用 Hash 结构登录用户购物车存入 Redis退出登录同步到数据库。5. 排行榜与统计商品销量 ZSet 排行榜每日 UV、PV HyperLogLog 统计商品点赞、收藏 Set 去重统计。6. 异步轻量消息Stream订单创建后发送消息扣库存、发送短信、生成物流单活动通知、首页实时数据更新。7. 会话共享SpringSession 整合 Redis多服务器集群部署时统一存储用户 Session实现登录无感知负载均衡。六、Redis 集群架构方案生产部署细节1. 主从复制 Master-Slave主节点写从节点全量同步数据从节点分担读请求读写分离故障主节点宕机无法自动切换适合简单读写分离。2. Sentinel 哨兵主从自动故障转移监控主从节点主宕机自动选举新 master提供统一访问地址业务无需感知主从切换适合中小型项目高可用。3. Redis Cluster 分片集群大规模分布式16384 个哈希槽数据分片存储多台主机横向扩容支持海量数据存储每个分片配套主从兼顾分片 高可用大型电商、高并发项目标准方案。七、生产环境核心运维 安全细节1. 内存优化设置maxmemory限制最大内存防止占用服务器全部内存选用volatile-lru淘汰策略大 key 拆分不要存储超 10000 条数据的 Hash/List拆分减少阻塞禁用大键全量查询避免主线程阻塞卡顿。2. 持久化配置线上开启 RDB AOFAOF 刷盘策略everysec平衡性能与数据安全。3. 安全配置设置requirepass强密码客户端连接必须鉴权禁止外网直接访问 6379 端口防火墙仅内网放行禁用危险命令flushall / flushdb / keys *绑定内网 IPbind 127.0.0.1 内网段。4. 性能优化单机拆分冷热数据热点 key 单独实例读写分离读请求走从节点避免长耗时命令keys、hgetall生产只用 scan 迭代遍历Redis6 开启多线程 IO提升网络并发。八、高频问题总结面试重点Redis 为什么快内存存储、单线程无锁竞争、IO 多路复用、高效数据编码。Redis 和 MySQL 区别Redis 内存缓存高性能支持复杂结构MySQL 磁盘持久化强事务存核心业务数据。分布式锁存在什么问题死锁设置过期时间、锁误删Lua 脚本校验持有者、主从切换锁失效Redlock 算法。缓存三大问题解决方案穿透布隆过滤器、缓存空值击穿互斥锁、热点 key 永不过期雪崩过期随机、集群、多级缓存。Redis 适合存什么不适合存什么✅ 热点、临时、计数、排行榜、会话、分布式锁 ❌ 海量冷数据、需要强事务一致性核心订单存 MySQL、超大二进制文件。