面试题答案
一键面试数据结构设计优化
- 使用Hash结构替代多个独立Key
- 原理:将相关的小字段合并存储在一个Hash结构中,减少键的数量。例如,原本为用户的每个属性(姓名、年龄、地址等)创建独立Key,现在将这些属性作为Hash的field存储在一个用户Key下。
- 预期效果:降低键空间的规模,减少键的查询压力,同时减少内存碎片,提高内存利用率。
- 使用Sorted Set存储有序数据
- 原理:对于需要排序的数据,如排行榜数据,使用Sorted Set。它可以根据score进行排序,同时可以根据member进行快速查找。
- 预期效果:高效地支持有序数据的插入、删除和查询操作,适用于高并发的排行榜更新和查询场景。
内存管理优化
- 合理设置数据过期策略
- 原理:通过设置合适的过期时间,让Redis自动删除过期数据,释放内存。例如,对于一些时效性强的数据,如短信验证码,设置较短的过期时间。
- 预期效果:避免无效数据长期占用内存,保证内存空间的有效利用,减轻内存压力。
- 采用内存淘汰策略
- 原理:当内存达到设定的阈值时,Redis根据配置的淘汰策略(如volatile - lru、allkeys - lru等)删除部分数据。例如,volatile - lru会从设置了过期时间的数据中淘汰最近最少使用的数据。
- 预期效果:确保Redis在内存紧张时,能通过淘汰部分数据继续提供服务,防止因内存耗尽导致系统崩溃。
分布式部署优化
- 主从复制
- 原理:主节点负责写操作,从节点复制主节点的数据。主节点将写命令同步给从节点,从节点以只读方式提供服务。
- 预期效果:提高读性能,分担读压力,同时提供数据冗余,增强系统的可用性。当主节点出现故障时,从节点可提升为主节点继续提供服务。
- 分片集群(如Redis Cluster)
- 原理:将数据分布到多个节点上,每个节点负责一部分数据。通过哈希槽(hash slot)算法,将键映射到不同的节点。例如,Redis Cluster有16384个哈希槽,每个节点负责一定范围的哈希槽。
- 预期效果:水平扩展系统的存储和读写能力,有效应对大规模高并发业务场景,每个节点可独立处理部分请求,减少单个节点的压力。