redis缓存一致性和缓存雪崩问题

今天面试被问到如何保障数据库缓存一致性,我说更新数据库之后删除缓存,他又问删除缓存之后刚好有大量请求打进来怎么办?这种情况怎么解决呀?

阅读 2.7k
4 个回答

缓存的引入就是牺牲数据一致性,来提高响应速度,从而提高系统并发能力,所以不应该要求缓存的强一致性,如果非要强一致性,应该提升数据库并发能力(主从、分库分表、分布式)而非引入缓存

缓存雪崩问题,从你问题描述看,比较热的缓存不应该删除,也不应该过期,而是保持更新,还有其他情况的缓存雪崩问题,就不展开讲了

你可以逛逛百度都有答案的,他说这个删除缓存后数据库被打崩,主要是缓存击穿的问题,这个问题你可以使用互斥锁来加锁使到达数据库的请求只有一个,其他线程进行等待,这个请求得到数据,可以加载到缓存让其他请求去缓存里拿数据或者这个线程把取到的数据通知到其他线程,让其他线程直接返回

面试官可能希望你回答的是双写,同时更新数据库和缓存,确保数据一致性

已参与了 SegmentFault 思否「问答」打卡,欢迎正在阅读的你也加入。

数据库更新的时候当缓存更新完成之后在进行commit 这样弊端是时间长,还有一个是缓存分布式,比如主从同步的时间是1s,如果1s以内会访问主库,超过这个时间就可以访问从库了,还有一种是redis的redlock可以去看下。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题