Redis

浏览该分类下的所有文章

Redis 缓存击穿、缓存穿透、缓存雪崩的解决方案

Redis 通过在内存中缓存 DB 数据,提高读写性能,但不当设计会出现三大问题: 1)缓存击穿:热点数据在高并发下刚好失效,所有请求冲击 DB。解决方案包括不设过期或加随机过期、预热热点、使用分布式锁防止并发 DB 读取。 2)缓存穿透:查询不存在的键,每次都落库。可在 DB 未命中时缓存空值,或使用布隆过滤器在查询前拦截不存在的键。 3)缓存雪崩:大量键同时间失效或 Redis 故障导致请求全部落库。防止措施有给过期时间加随机值、接口限流、服务熔断,以及构建 Redis 哨兵/Cluster 高可用集群。 通过上述策略,可保障缓存的高可用性,避免对后端数据库造成冲击。

Redis分布式锁的七种方案

Redis 常用于实现分布式锁,可靠的锁应具备互斥、超时释放、可重入、高性能、高可用和安全性。文中系统梳理了七种实现方式:① SETNX + EXPIRE,操作不原子易导致死锁;② SETNX + 时间戳值,需客户端时间同步且仍缺唯一标识;③ Lua 脚本一次性完成 SETNX 与 EXPIRE,保证原子性;④ SET EX PX NX 直接原子加锁;⑤ 在 value 中存唯一随机标识并用 Lua 脚本校验后删除,防止误删;⑥ Redisson 框架通过 watchdog 自动续期解决锁提前失效问题;⑦ Redlock 多节点算法,在多数 Redis master 上同时加锁并校时,提升跨节点的安全性。每种方案的优缺点和适用场景均有阐述。

面试现场【Redis篇】

Redis 4.0 前单线程处理网络 I/O 与 Set/Get,避免锁竞争并使用 epoll 实现高效 I/O;4.0 后引入多线程用于大数据异步删除。持久化提供 AOF(追加日志)和 RDB(快照)两种方式,4.0 还支持二者混合。AOF 先执行命令再写日志,存在数据丢失和阻塞风险;RDB 可通过 save 同步阻塞或 bgsave 子进程异步生成快照,写时复制保证数据可修改。高可用方案包括主从复制、哨兵自动故障转移和 Cluster。Cluster 将键映射至 16384 个哈希槽,采用 CRC16 取模实现节点选择,解决写和存储扩展问题。

Redis持久化、主从与哨兵架构

Redis提供RDB快照(save同步、bgsave异步)和AOF日志(appendfsync策略、重写),并可开启混合持久化以加速重启。可用crontab实现定时备份。主从复制使用PSYNC,支持全量/增量同步和断点续传,并可配置只读从节点。Jedis示例展示连接池、Pipeline批量请求及Lua脚本实现原子操作。