redis和mysql的一致性

来源:14-9 缓存在高并发场景中的生产问题分享

c9870884

2023-06-17

请问老师本项目中是否有涉及到关于redis和mysql的一致性问题相关呀?目前这个项目我还没看完,还在继续看。
因为我看一致性问题是面试当中的一个重点高频问题,看章节目录好像没有提到,所以想问一下。

写回答

1回答

甲蛙

2023-06-19

mysql和redis的一致性,一般都是弱一致性,就是某个时间段,数据会不一致,但最终是一致的,比如余票查询,用户查的时候,列表从缓存里读,显示余票为1,但实际数据库可能是0了,但经过定时刷新缓存,最终缓存里也会变为0。

强一致性的话,几乎没法做,不适用,会有几个问题:

  1. 每次有人买票,都要同时修改数据库和缓存,对于高并发抢票,就会去频繁的修改缓存,这就失去了缓存的意义,缓存应该是读多写少。

  2. 比如缓存更新失败了,难道就不让用了?功能设计上,肯定是把缓存当成功能加强,而不是功能必须。缓存失败时,我们还是要能通过数据库来取数据,只不过为了防止并发过大,数据库撑不住,我们要加其它技术方案,比如限流、令牌、加锁等。

  3. 一次购票中,我们想同时更新缓存和数据库,但没法做到同时,他们又不能加事务,总是有先后的,所以依然有可能出现用户查到的缓存数据和数据库不一致的情况。

所以,一般我们的用法就是弱一致性:数据读缓存,然后定期更新或条件更新缓存

3
7
甲蛙
回复
wyz666
我们课程没有加定时器,我有点忘了,是不是查询缓存给去了,没去的话,就是等缓存过期失效后,重新查数据库并存入缓存,这样可以少一个定时器,但对于热点数据有缓存击穿的风险
2024-01-03
共7条回复

新版Springboot3.0打造能落地的高并发仿12306售票系统

最新版Spring3.0仿12306售票系统实战

852 学习 · 511 问题

查看课程