解决方案一:延时双删
https://zhuanlan.zhihu.com/p/147028497
1、删除缓存
(其他线程此时查询缓存为空,会查询到数据库的旧值,并回填脏数据)
2、更新数据库
3、休眠500ms,等待脏数据回填完成
4、再次删除缓存,清空脏数据
解决方案二:内存队列
https://www.jianshu.com/p/5561d7d6dea7
1、操作业务时,直接将其丢进队列,等待异步执行;
2、当出现读请求时,先读缓存,成功则返回;
3、如果缓存不存在,再去判断队列头部是否是同一条记录的更新请求;
4、如果是,为了不打断其操作,将读请求也丢进队列,然后同步等待缓存更新完成;
5、如果不是,说明该更新请求早已完成,直接读数据库并缓存即可,不要入队列。