面试题答案
一键面试惰性删除
- 系统性能
- 读操作:每次读操作检查键是否过期,若过期则删除。这会增加读操作的时间复杂度,在高并发读时可能导致性能瓶颈。
- 写操作:基本不受影响。
- 内存使用 可能会导致过期键长时间占用内存,直到被访问才删除,内存释放不及时。
- 数据一致性 数据一致性较好,只有当访问过期键时才会删除,保证数据在被访问前都是“有效”状态。
- 适用场景:适用于内存压力较小且对数据一致性要求较高的场景,如一些对实时性数据要求不高,但数据准确性很重要的系统。
定期删除
- 系统性能
- 读操作:后台定期检查并删除过期键,对读操作性能影响相对较小,但如果删除操作过于频繁或耗时较长,仍可能影响读性能。
- 写操作:同理,对写操作影响也较小。
- 内存使用 相比惰性删除,能更及时地释放过期键占用的内存,但如果定期检查频率过低,仍可能存在内存浪费情况。
- 数据一致性 数据一致性相对惰性删除稍弱,因为可能存在过期键在下次检查前仍未被删除的情况。
- 适用场景:适用于对内存使用较为敏感,同时对数据一致性要求不是极高的场景,如缓存一些不太重要的临时数据。
内存淘汰策略
- 系统性能
- 读操作:当内存达到阈值触发淘汰策略时,可能会导致部分读请求的数据缺失,需要重新获取数据,增加读操作的额外开销。
- 写操作:同样,写操作可能因为需要淘汰数据而增加延迟。
- 内存使用 能有效控制内存使用,确保Redis在内存阈值内运行,避免因内存耗尽导致系统崩溃。
- 数据一致性 数据一致性较差,被淘汰的数据可能是未过期的,会导致数据丢失。
- 适用场景:适用于对内存严格限制,且对数据一致性要求相对较低的场景,如大规模缓存场景,允许部分数据丢失或重建。
总结
- 优先选择策略
- 若对数据一致性要求极高,内存压力不大,优先选择惰性删除。
- 若对内存使用较为敏感,对数据一致性要求尚可,优先选择定期删除。
- 若对内存严格限制,能接受一定的数据丢失,优先选择内存淘汰策略。