Redis面试核心攻略:1. 数据结构:String、List、Set、ZSet、Hash应用场景和命令;2. 持久化:RDB快照和AOF日志优缺点,选择时机;3. 集群:主从复制、哨兵、Cluster分片机制;4. 性能优化:内存管理、 eviction策略、慢查询分析;5. 常见问题:缓存穿透、雪崩、热点key解决方案。掌握这些,面试通过率提升80%!
Redis基础知识
Redis是一个开源的、支持网络、基于内存的、支持持久化的Key-Value存储数据库,通常被称作是数据结构服务器。Redis有丰富的的数据结构类型,包括String(字符串,包括二进制数据)、Hash(哈希表)、List(列表)、Set(集合)、ZSet(有序集合)。
持久化机制详解
Redis的持久化有两种方式:RDB(Redis DataBase Backup)和AOF(Append Only File)。RDB是以快照的方式记录Redis在某个时间点的数据快照,优点是文件紧凑,适合冷备份;AOF是以追加日志的方式记录Redis的每一次写操作,优点是数据恢复更完整,但文件较大。
主从复制与高可用
Redis的主从复制是异步的,主节点会将数据变更指令异步发送给从节点,从节点根据指令进行数据同步。哨兵(Sentinel)模式用于监控主从节点,实现故障转移;Redis Cluster是官方的分片集群方案,支持16384个槽位,通过CRC16哈希算法分配key到槽位。
内存管理与淘汰策略
Redis内存不足时,会根据maxmemory-policy配置的淘汰策略删除key。常见策略有noeviction(不淘汰,返回错误)、allkeys-lru(所有key中最少使用)、volatile-lru(带expire的key中最少使用)、allkeys-random等。建议线上使用allkeys-lru。
缓存问题解决方案
缓存穿透:用布隆过滤器预判不存在的key;缓存雪崩:设置不同过期时间、热点数据多级缓存;缓存击穿:设置永不过期或mutex锁;热点key:本地缓存+双层缓存。分布式锁用SETNX+过期时间实现。
Pub/Sub与事务
Redis的发布订阅(Pub/Sub)通过PUBLISH和SUBSCRIBE命令实现,消息丢失不支持持久化。事务用MULTI/EXEC/DISCARD,WATCH实现乐观锁。Lua脚本原子性执行常用在复杂逻辑中。
FAQ
Q: Redis和Memcached区别?
A: Redis支持丰富数据结构、持久化、集群,Memcached只支持string、无持久化。
Q: 如何选择持久化方式?
A: 追求速度用RDB,数据安全用AOF,二者结合最佳。
Q: Redis Cluster和哨兵区别?
A: 哨兵是高可用主从,Cluster是分片集群支持扩容。
Q: 为什么Redis单线程快?
A: 内存操作、无锁竞争、纯内存、多路复用I/O。