面试题答案
一键面试缓存更新策略
- 先更新数据库,再更新缓存
- 优点:逻辑相对简单,在单线程操作下能保证数据一致性。
- 缺点:在高并发场景下,可能会出现更新数据库后,还未更新缓存时,其他读请求从缓存中读取到旧数据的情况。
- 先删除缓存,再更新数据库
- 优点:在大部分情况下能保证数据一致性,因为后续读请求会发现缓存中无数据,从而从数据库读取最新数据并更新到缓存。
- 缺点:如果在删除缓存后,更新数据库前,有读请求进来,会读取到旧数据并重新将旧数据写入缓存;另外如果删除缓存失败,也可能导致数据不一致。
- 先更新数据库,再删除缓存
- 优点:相对来说较为可靠,能最大程度保证数据一致性。更新数据库成功后删除缓存,即使删除缓存失败,后续的读请求也会发现缓存数据与数据库不一致,从而从数据库读取最新数据并更新缓存。
- 缺点:如果删除缓存操作一直失败,可能在一段时间内缓存数据与数据库数据不一致。可以通过重试机制、监控报警等手段来处理这种情况。
持久化配置参数调整
- RDB(Redis Database)
- 优点:RDB是一种快照式持久化,在恢复大数据集时速度比AOF快。
- 缺点:由于是定期快照,可能会丢失最近一次快照后到故障发生时的数据。
- 调整策略:可以适当缩短快照的间隔时间,但过短可能会影响Redis性能。例如,通过修改
save
配置参数,如save 60 10000
表示在60秒内如果有10000个写操作就进行一次快照。但需根据业务场景和服务器性能综合评估。
- AOF(Append - Only File)
- 优点:AOF是追加式持久化,能记录每一个写操作,数据丢失风险小。
- 缺点:文件体积可能增长较快,恢复数据时可能比RDB慢。
- 调整策略:可以选择合适的
appendfsync
策略。appendfsync always
表示每次写操作都同步到AOF文件,数据安全性最高,但性能影响较大;appendfsync everysec
表示每秒同步一次,是性能和数据安全的一个较好平衡;appendfsync no
表示由操作系统决定何时同步,性能最高但数据丢失风险相对较大。一般建议采用appendfsync everysec
。同时,可以定期对AOF文件进行重写(bgrewriteaof
),以压缩文件体积。