Redis 详解:从入门到进阶
文章目录
- 前言
- 一、什么是 Redis?
- 二、Redis 使用场景
- 1. 缓存热点数据
- 2. 消息队列
- 3. 分布式锁
- 4. 限流与防刷
- 5. 计数器、排行榜
- 三、缓存三大问题:雪崩 / 穿透 / 击穿
- 1. ❄️ 缓存雪崩(Cache Avalanche)
- 2. 🔍 缓存穿透(Cache Penetration)
- 3. ⚡ 缓存击穿(Cache Breakdown)
- 四、Redisson 分布式锁实践(必考面试题)
- 五、Redis 哨兵机制与高可用方案
- 什么是哨兵机制(Sentinel)?
- 哨兵功能:
- 总结
前言
在现代高并发、高性能的互联网系统中,缓存几乎是标配,而 Redis 无疑是最广泛使用的缓存中间件之一。它不仅性能极高,而且提供了丰富的数据结构与强大的扩展能力,成为微服务架构、消息系统、分布式锁等场景的核心组件。
然而,很多人对 Redis 的认知仍停留在“用来缓存数据”这一层面。实际上,在实际项目中,缓存雪崩、缓存穿透、缓存击穿等问题频频出现,如果没有处理好,不但不能提升性能,反而可能压垮整个系统。
此外,随着分布式系统的普及,分布式锁的引入与实现也成为常见需求。而 Redisson 作为 Redis 官方推荐的 Java 客户端,提供了丰富且易用的分布式工具集,是解决这些问题的优秀选择。
本篇博客将从以下几个方面全面介绍 Redis 的使用与实战问题:
- Redis 是什么,有哪些核心特性?
- Redis 常见的使用场景有哪些?
- 如何理解并解决缓存雪崩、穿透、击穿?
- 分布式锁如何实现?Redisson 如何优雅地完成?
- 哨兵机制
无论你是刚接触 Redis 的初学者,还是在项目中踩过坑的老手,相信这篇文章都能帮你更深入地理解 Redis,并在实际工作中少走一些弯路。
一、什么是 Redis?
Redis(Remote Dictionary Server)是一个开源的基于内存的高性能键值对NoSql数据库。相比传统数据库,Redis 的优势在于“快”,在于“结构丰富”,在于“高可用”。
✅ 核心特性:
- 内存存储,速度极快(100,000+ QPS)
- 数据结构丰富:支持 String、List、Set、Hash、ZSet、Stream、HyperLogLog 等
- 持久化:支持 RDB 快照和 AOF 日志
- 高可用架构支持:主从复制、哨兵、集群
- 原子操作:天然支持并发安全
二、Redis 使用场景
1. 缓存热点数据
- 用户信息、商品详情、排行榜、配置中心等
- 可显著减轻数据库压力
2. 消息队列
- 使用 List、Stream 实现生产者消费者模型
- 更轻量级的 MQ 替代方案(如订单异步处理)
3. 分布式锁
- 控制并发执行、任务幂等等场景
- 使用 Redisson、SETNX 等方案实现
4. 限流与防刷
- 基于 INCR、EXPIRE 实现滑动窗口限流
- 搭配 Lua 脚本实现原子性操作
5. 计数器、排行榜
- 使用 INCR、ZSet 轻松实现点赞、浏览、Top N 等功能
三、缓存三大问题:雪崩 / 穿透 / 击穿
1. ❄️ 缓存雪崩(Cache Avalanche)
**定义:**大量缓存同一时间失效,导致请求直接打到数据库,造成数据库压力骤增甚至宕机。
解决方案:
- 设置缓存过期时间时加入 随机因子,避免集中失效
- 设置重要数据 永不过期,后台定时刷新
- 使用熔断、限流等 降级机制
2. 🔍 缓存穿透(Cache Penetration)
定义:请求的是数据库和缓存中都不存在的 key(如非法用户 ID),每次都打到数据库。
解决方案:
- 缓存空值:对不存在的结果也缓存一段时间
- 布隆过滤器:使用布隆过滤器拦截非法访问 ID
3. ⚡ 缓存击穿(Cache Breakdown)
定义:某个热点 key 失效,大量请求在这一瞬间打入数据库。
解决方案:
- 为热点数据设置永不过期或延迟更新
- 加分布式锁,防止多个线程同时回源查询数据库
四、Redisson 分布式锁实践(必考面试题)
Redisson,一个功能完善、健壮的 Java 分布式锁框架。
// 创建 Redisson 客户端
Config config = new Config();
config.useSingleServer().setAddress("redis://127.0.0.1:6379");
RedissonClient redisson = Redisson.create(config);// 获取锁
RLock lock = redisson.getLock("my-lock");try {// 加锁:默认 30s 自动续期lock.lock();// 业务逻辑System.out.println("执行业务逻辑...");} finally {lock.unlock();
}
锁类型 | 说明 |
---|---|
RLock | 可重入锁(默认) |
RReadWriteLock | 支持读写分离 |
RSemaphore | 限流用(如限购场景) |
RCountDownLatch | 多线程协作任务同步 |
五、Redis 哨兵机制与高可用方案
什么是哨兵机制(Sentinel)?
当主节点宕机时,哨兵会自动将从节点切换为主节点,并通知客户端更新连接地址,实现高可用部署。
哨兵功能:
- 监控:判断主节点是否故障
- 自动故障转移:主挂了,选出新的主
- 通知客户端更新地址
- 集群健壮性增强
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
总结
Redis 是现代后端开发中不可或缺的一环,不仅仅是缓存工具,更是数据库、消息系统、分布式控制等场景的万能胶水。