redis 缓存相关
基本缓存系统流程图
redis缓存流程图.png分析缓存的过程
- 由于引入缓存,那么更新时,不仅要更新数据库,而且要更新缓存,这两个更新操作存在前后的问题:
- 先更新数据库,再更新缓存;
- 先更新缓存,再更新数据库;
在高并发场景下,会出现数据库和缓存数据不一致问题
-
分析缓存和数据库不一致现象
数据库和缓存不一致.png
- 先更新缓存,再更新数据库;也会出现数据不一致现象
同理:
请求A先更新缓存为1;同时,请求B更新缓存为2,然后更新数据库为2;
最后请求A更数据库位1;
这样当前缓存数据2,数据库数据为1;
所以,无论是「先更新数据库,再更新缓存」,还是「先更新缓存,再更新数据库」,这两个方案都存在并发问题,当两个请求并发更新同一条数据的时候,可能会出现缓存和数据库中的数据不一致的现象。
解决缓存和数据库数据不一致
通过思考,在更新数据时,不更新缓存,而是删除缓存数据,然后读取数据时候,发现缓存没了命中数据之后,在从数据库读取数据,更新到缓存中
分析图:
- 写策略步骤:
- 更新数据库中的数据;
- 删除缓存中的数据。
- 读策略的步骤:
- 如果读取的数据命中了缓存,则直接返回数据;
- 如果读取的数据没有命中缓存,则从数据库中读取数据,然后将数据写入到缓存,并且返回给用户。
在想到「写策略」的时候,又陷入更深层次的思考,到底该选择哪种顺序呢
先删除缓存,再更新数据库;
先更新数据库,再删除缓存。
用并发的角度来分析,看看这两种方案哪个可以保证数据库与缓存的数据一致性。
敬请期待
网友评论