面试题答案
一键面试持久化策略
- RDB(Redis Database)
- 优点:
- 生成的快照文件紧凑,占用空间小,适用于数据备份和灾难恢复。在恢复大数据集时,RDB 比 AOF 速度更快,因为它是直接将快照文件读入内存。
- 对 Redis 性能影响相对较小,因为 RDB 是定期进行快照,而不是每次写操作都记录。
- 缺点:
- 数据可能丢失,因为两次快照之间的写入操作不会被记录。例如,如果每 5 分钟执行一次 RDB 快照,在这 5 分钟内发生故障,这期间的数据将丢失。
- 生成快照时,可能会阻塞主线程,尤其是在大数据集下,fork 子进程的操作可能会消耗较多时间和内存。
- 优点:
- AOF(Append - Only File)
- 优点:
- 数据安全性更高,因为 AOF 是追加式的日志记录,几乎可以做到不丢失数据(取决于 fsync 策略)。
- 以日志形式记录写操作,容易进行数据恢复和故障修复。
- 缺点:
- AOF 文件通常比 RDB 文件大,因为它记录了每一个写操作。随着时间推移,文件会不断增长,占用更多磁盘空间。
- 恢复数据时,AOF 需要重放所有的写操作日志,相对 RDB 恢复速度较慢。而且 AOF 重写过程也可能会消耗较多系统资源,影响 Redis 性能。
- 在该场景下的策略选择:由于读写频率差异大,读操作频繁,对数据恢复速度有一定要求,但又要尽量减少数据丢失,可采用 RDB 为主,AOF 为辅的策略。例如,定期执行 RDB 快照用于快速恢复,同时开启 AOF 并选择合适的 fsync 策略(如每秒 fsync 一次)来保证数据安全性。
- 优点:
数据淘汰策略
- volatile - lru(Least Recently Used)
- 优点:
- 优先淘汰设置了过期时间且最近最少使用的键,适用于存在大量临时数据的场景。能有效利用内存,保证热点数据留在内存中,提高缓存命中率。
- 缺点:
- 如果大部分数据都设置了过期时间,可能会导致部分仍有使用价值但过期时间较长且近期未使用的数据被淘汰。
- 优点:
- volatile - ttl
- 优点:
- 优先淘汰即将过期的键,能很好地控制内存,避免过期数据占用过多内存。适用于对数据有效期敏感的场景。
- 缺点:
- 可能会淘汰一些虽然即将过期但马上又会被访问的数据,而且不考虑数据的使用频率。
- 优点:
- allkeys - lru
- 优点:
- 无论数据是否设置过期时间,淘汰最近最少使用的键,适用于希望最大化利用内存且缓存数据无严格有效期限制的场景,能有效保证热点数据在内存中。
- 缺点:
- 在数据量非常大且数据访问模式复杂时,LRU 算法的近似实现可能导致一些热点数据被误淘汰。
- 优点:
- 在该场景下的策略选择:鉴于海量数据且读写频率差异大,allkeys - lru 可能是较好的选择,能有效保证热点数据留在内存中,提高读操作性能,同时合理利用内存。
集群架构
- 主从复制
- 优点:
- 提高了读性能,从节点可以分担主节点的读请求压力,适用于读写频率差异大的场景。
- 提供数据冗余,从节点复制主节点数据,当主节点出现故障时,从节点可以晋升为主节点继续提供服务,增强系统可用性。
- 缺点:
- 主节点的写操作压力较大,所有写操作都集中在主节点。
- 数据同步可能存在延迟,尤其是在网络不稳定或数据量较大时,从节点的数据可能与主节点有一定时间差。
- 优点:
- 哨兵模式
- 优点:
- 在主从复制基础上,实现了自动故障检测和故障转移。当主节点发生故障时,哨兵可以自动将一个从节点晋升为主节点,无需人工干预,提高系统的可用性。
- 监控主从节点的运行状态,及时发现并通知管理员异常情况。
- 缺点:
- 增加了系统复杂度,需要额外部署和管理哨兵节点。
- 故障转移过程中可能会出现短暂的服务不可用,并且可能存在脑裂问题,即多个从节点同时认为自己是主节点。
- 优点:
- Cluster 集群
- 优点:
- 实现了数据的分布式存储,将数据分散到多个节点上,提高了系统的可扩展性,可以应对海量数据场景。
- 每个节点都可以处理读写请求,负载均衡效果好,提高了整体性能。
- 缺点:
- 配置和管理相对复杂,需要考虑节点的添加、删除、故障处理等。
- 数据迁移过程可能会影响系统性能,并且在集群规模较大时,网络开销也会相应增加。
- 在该场景下的策略选择:对于海量数据且读写频率差异大的场景,Cluster 集群结合主从复制(在每个分片内采用主从复制)可能是较好的选择。Cluster 集群实现数据分布式存储和负载均衡,提高读性能和扩展性,每个分片内的主从复制提供数据冗余和一定的写性能提升。同时可以结合哨兵模式实现自动故障检测和转移,增强系统的可用性。
- 优点: