今天面试被问到如何保障数据库缓存一致性,我说更新数据库之后删除缓存,他又问删除缓存之后刚好有大量请求打进来怎么办?这种情况怎么解决呀?
你可以逛逛百度都有答案的,他说这个删除缓存后数据库被打崩,主要是缓存击穿的问题,这个问题你可以使用互斥锁来加锁使到达数据库的请求只有一个,其他线程进行等待,这个请求得到数据,可以加载到缓存让其他请求去缓存里拿数据或者这个线程把取到的数据通知到其他线程,让其他线程直接返回
数据库更新的时候当缓存更新完成之后在进行commit 这样弊端是时间长,还有一个是缓存分布式,比如主从同步的时间是1s,如果1s以内会访问主库,超过这个时间就可以访问从库了,还有一种是redis的redlock可以去看下。
15 回答8.4k 阅读
8 回答6.2k 阅读
4 回答4.4k 阅读✓ 已解决
5 回答3.2k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
4 回答4k 阅读
1 回答2.9k 阅读✓ 已解决
缓存的引入就是牺牲数据一致性,来提高响应速度,从而提高系统并发能力,所以不应该要求缓存的强一致性,如果非要强一致性,应该提升数据库并发能力(主从、分库分表、分布式)而非引入缓存
缓存雪崩问题,从你问题描述看,比较热的缓存不应该删除,也不应该过期,而是保持更新,还有其他情况的缓存雪崩问题,就不展开讲了