redis和mysql的一致性
来源:14-9 缓存在高并发场景中的生产问题分享

c9870884
2023-06-17
请问老师本项目中是否有涉及到关于redis和mysql的一致性问题相关呀?目前这个项目我还没看完,还在继续看。
因为我看一致性问题是面试当中的一个重点高频问题,看章节目录好像没有提到,所以想问一下。
写回答
1回答
-
甲蛙
2023-06-19
mysql和redis的一致性,一般都是弱一致性,就是某个时间段,数据会不一致,但最终是一致的,比如余票查询,用户查的时候,列表从缓存里读,显示余票为1,但实际数据库可能是0了,但经过定时刷新缓存,最终缓存里也会变为0。
强一致性的话,几乎没法做,不适用,会有几个问题:
每次有人买票,都要同时修改数据库和缓存,对于高并发抢票,就会去频繁的修改缓存,这就失去了缓存的意义,缓存应该是读多写少。
比如缓存更新失败了,难道就不让用了?功能设计上,肯定是把缓存当成功能加强,而不是功能必须。缓存失败时,我们还是要能通过数据库来取数据,只不过为了防止并发过大,数据库撑不住,我们要加其它技术方案,比如限流、令牌、加锁等。
一次购票中,我们想同时更新缓存和数据库,但没法做到同时,他们又不能加事务,总是有先后的,所以依然有可能出现用户查到的缓存数据和数据库不一致的情况。
所以,一般我们的用法就是弱一致性:数据读缓存,然后定期更新或条件更新缓存
372024-01-03
相似问题