一句话总结
Redis 是缓存面试的核心,核心考点:5种基本类型+3种特殊类型、持久化(RDB快照 vs AOF日志)、集群(主从+哨兵+Cluster)、缓存三大问题(穿透/击穿/雪崩+解决方案)、双写一致性(Cache Aside + 延迟双删)。
数据类型
五种基本类型:
String:最基础类型,可存字符串、数字、JSON。常用命令SET/GET/INCR。
Hash:键值对集合,适合存对象。HSET/HGET/HMGET。
List:有序可重复列表,LPUSH/RPOP实现队列。
Set:无序不重复集合,SADD/SMEMBERS/SINTER。
ZSet:有序不重复集合,带分数排序。ZADD/ZRANGEBYSCORE。
三种特殊类型:HyperLogLog(基数统计)、Bitmap(位操作)、GEO(地理位置)。
持久化机制
RDB:定时快照,fork子进程写磁盘。恢复快,但可能丢失最后一次快照后的数据。
AOF:追加写日志,三种刷盘策略:always/everysec/no。数据更安全,文件更大。
混合持久化:Redis 4.0引入,RDB格式写AOF文件,兼顾恢复速度和数据安全。
面试重点:RDB和AOF的优缺点对比、选择策略、AOF重写机制。
集群方案
主从复制:全量同步+增量同步。主节点写,从节点读,实现读写分离。
哨兵模式:监控主节点,自动故障转移。至少3个哨兵节点。
Cluster模式:16384个哈希槽分布到多个节点,支持横向扩展。每个节点负责一部分槽。
数据分片:hash_slot = CRC16(key) % 16384
缓存经典问题
缓存穿透:查询不存在的数据,请求直达数据库。解决:布隆过滤器、缓存空值。
缓存击穿:热点key过期,大量请求直达数据库。解决:互斥锁、永不过期+异步更新。
缓存雪崩:大量key同时过期。解决:过期时间加随机值、多级缓存、熔断降级。
双写一致性:Cache Aside Pattern:先更新数据库,再删除缓存。延迟双删保证最终一致性。