面试的时候,总会遇到这么一个场景。
1. 场景分析
面试官:你们的服务的QPS是多少?
我:我们的服务高峰期访问量还挺大的,大约是3万吧。
面试官:这么大的访问量,你们的服务器能撑住吗?有加缓存吗?
我:有的,我们使用了Redis做缓存,接口优先查询缓存,缓存不存在,才访问数据库。这样可以减少数据库访问压力,加快查询效率。
面试官:一份数据存储在两个地方,更新数据的时候,你们是怎么保证数据的一致性的?
看到了吧,好的面试官一般不直接问你数据一致性的解决方案,而是循循善诱,结合具体的使用场景,再问你解决方法。如果你没做过这方面,没有线上的实战经验,一般很难回答的有条理性、有思考性。
保证数据一致性,一般有这4种方法:
1.先更新缓存,再更新数据库。
2.先更新数据库,再更新缓存。
3.先删除缓存,再更新数据库。
4.先更新数据库,再删除缓存。
每种方案都详细的讨论一下:
2. 解决方案
2.1 先更新缓存,再更新数据库
如果同时来了两个并发写请求,执行过程是这样的: