面试题答案
一键面试先更新数据库再更新缓存
- 优点:
- 数据一致性实现相对简单,逻辑直接,按照先持久化数据到数据库,再同步更新缓存,易于理解和实现。
- 缺点:
- 并发问题:在高并发场景下,如果两个请求同时进行更新操作,第一个请求更新了数据库,但还未更新缓存,第二个请求更新了数据库并更新了缓存,此时第一个请求更新缓存,就会导致缓存中的数据是旧数据,出现数据不一致。
- 性能问题:每次更新都要操作数据库和缓存,增加了系统开销,降低了整体的响应速度。
先删除缓存再更新数据库
- 优点:
- 并发场景优势:在并发场景下,相比先更新数据库再更新缓存,减少了缓存数据不一致的概率。因为先删除缓存,后续读取时会从数据库加载最新数据并写入缓存。
- 性能方面:只需要先删除缓存,再操作数据库,相比双写操作,性能上有一定提升。
- 缺点:
- 数据不一致风险:如果在删除缓存后,更新数据库操作失败,而此时有其他请求读取数据,会从数据库读取到旧数据并写入缓存,导致数据不一致。
- 缓存穿透:在高并发情况下,当删除缓存后,数据库更新前,大量请求同时查询该数据,都去查询数据库,可能导致数据库压力瞬间增大,甚至引发缓存穿透问题。
先更新数据库再删除缓存
- 优点:
- 并发一致性较好:在并发场景下,先更新数据库保证了数据的持久化,然后删除缓存,后续读取时从数据库加载最新数据到缓存,相比其他两种策略,能更好地保证数据一致性。
- 性能与一致性平衡:相对先更新数据库再更新缓存,减少了一次缓存写操作,性能有所提升;同时相比先删除缓存再更新数据库,降低了因数据库更新失败导致的数据不一致风险。
- 缺点:
- 短暂不一致:在更新数据库和删除缓存之间存在短暂时间窗口,如果在这个窗口内有读取请求,会读到旧的缓存数据。不过这种不一致时间通常较短,在可接受范围内。
- 缓存雪崩:如果在大量数据同时过期或被删除缓存时,同时有大量请求读取数据,都去查询数据库,可能引发缓存雪崩,对数据库造成较大压力。