redis和mysql数据一致性问题

简述

  在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。

数据一致性问题

  如果删除了缓存Redis,还没有来得及写库MySQL,另一个线程就来读取,发现缓存为空,则去数据库中读取数据写入缓存,此时缓存中为脏数据。因为写和读是并发的,没法保证顺序,就会出现缓存和数据库的数据不一致的问题。

延时双删策略

  在写库前后都进行redis.del(key)操作,并且设定合理的超时时间

  具体的步骤就是:先删除缓存、再写数据库、休眠x毫秒、再次删除缓存

  这个x秒则是需要评估自己的项目的读数据业务逻辑的耗时,确保读请求结束,写请求可以删除读请求造成的缓存脏数据。

  弊端:在超时时间内数据存在不一致,而且又增加了写请求的耗时

异步更新缓存策略

  待续

  

一点一点积累,一点一点蜕变!
原文地址:https://www.cnblogs.com/qq2210446939/p/15120231.html