企业网站建设进度,东莞网站建设优化推广,找个网站怎么这么难,上海企业免费网站建设用户更新数据库#xff0c;需要再去更新redis缓存#xff0c;否则会造成缓存与数据库数据不一致 一致性的两种方法 1). 双写模式 更新完数据库之后#xff0c;更新redis缓存数据 问题: 因为请求时间的问题#xff0c;造成缓存数据不是最新的 数据。 原因#xff1a;A先修… 用户更新数据库需要再去更新redis缓存否则会造成缓存与数据库数据不一致 一致性的两种方法 1). 双写模式 更新完数据库之后更新redis缓存数据 问题: 因为请求时间的问题造成缓存数据不是最新的 数据。 原因A先修改key为1B后修改key为5mysql先更新为1后为5随后更新redis缓存的时候由于A请求时间过慢B先更新key为5最后的结果是缓存key为A修改的1。数据库为5缓存为1数据不一致。
2). 失效模式 更新完数据库之后删除缓存数据下次新的请求进来再去请求数据库再去更新缓存。 问题由于请求时间问题会造成脏数据缓存与数据库不一致。 原因A修改数据库key为1删除缓存 B修改数据库key为5在进行修改mysql未完成 D到缓存查询key为null到数据库查询key此时还是1随后存到缓存中在进行未完成 B此时修改数据库完成缓存此时还是空不需要删除 D在B 存mysql和redis完成之后更新了key为1 这种情况导致数据库是最新的但是仍然是A的旧数据数据不一致。
解决数据一致性方法 可以将整个更新过程进行加锁更新mysql和更新缓存数据加锁执行完毕再unlock下一个线程才能进来。 但是这种方法会导致服务变慢。
如果数据经常修改加锁会慢。如果要求实时读取直接读取数据库缓存里面加上过期时间。