Redis面试题原理剖析,科普分布式缓存与数据结构实现
Redis作为分布式缓存的核心,通过键值对存储和事件驱动模型实现高性能读写,支持List、Set、Hash、Sorted Set和GEO等数据结构,持久化机制如RDB和AOF确保数据安全,主从复制与哨兵实现高可用,集群模式下分片存储支撑海量数据。
分布式缓存的核心优势
Redis Cluster将数据均匀分布到多个节点,每个节点负责一部分槽位,通过CRC16哈希算法计算键的槽位,实现自动分片和故障转移,避免单点故障,支持在线扩缩容。
数据结构List实现原理
Redis List底层使用quicklist,既有双向链表的O(1)插入效率,又压缩了ziplist的内存占用,LPUSH/RPOP支持队列和栈操作,BLPOP实现阻塞队列。
Set和Sorted Set剖析
Set使用hash表+ziplist或intset存储无序不重复集合,SINTER等操作高效求交集;Sorted Set用skiplist+hash表,支持O(logN)范围查询和排行榜ZADD/ZRANGE。
GEO位置服务实战
Redis GEO基于Sorted Set存储经纬度,用geohash编码计算距离,GEORADIUS命令返回指定半径内位置点,支持附近的人和LBS服务。
持久化和高可用机制
RDB快照每隔一段时间fork进程生成压缩快照,AOF日志记录每条写命令,支持bgrewriteaof重写;哨兵模式监控主从切换,集群用gossip协议选举master。
FAQ
Q: Redis集群如何处理节点故障?A: 故障节点从集群移除,其槽位由其他master接管,通过gossip协议通知全集群。
Q: List和LinkedList有什么区别?A: Redis List是双端队列,支持从两端操作,占用连续内存块更高效。
Q: GEO如何计算两点距离?A: 用Haversine公式基于经纬度计算球面距离,支持米、千米等单位。