保证缓存和数据库一致性

如何保证缓存和数据库数据一致性呢?

1 先删除缓存 再更新数据库

  • 线程1删除缓存
  • 线程2查询数据 缓存没有命中, 从数据库load数据放到缓存
  • 线程1更新数据库.
    后续的查询一直走老的数据.

2 先更新数据库 再删除缓存.

  • 线程1 更新数据库
  • 线程2 查询数据 老的缓存
  • 线程1 删除缓存
    后续的查询 走新的数据

极端情况下也有问题

  • 线程1 查询数据 没有命中缓存 查询数据库
  • 线程2 更新数据库 删除缓存
  • 线程1 把数据库数据放入缓存.

概率比较低
线程1 恰好没有命中缓存. 同时一个并发写请求.
线程2个更新数据库删除缓存 恰好在线程1查询数据库之后

友情链接
http://coolshell.cn/articles/17416.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 需要原文的可以留下邮箱我给你发,这里的文章少了很多图,懒得网上粘啦 1数据库基础 1.1数据库定义 1)数据库(D...
    极简纯粹_阅读 12,203评论 0 46
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,959评论 25 709
  • 这是我第一次写这种博客形式的文章,感觉很新鲜,不知道以这样形式的文章作为第一篇是不是有些合适,又是不是有些简短,但...
    匿名者Focus阅读 3,682评论 0 0
  • Question: Write a bash script to calculate the frequency ...
    W有来有去阅读 1,560评论 0 0
  • 不知道何时起从遥远的宝岛飘过来那一阵阵文艺的暖流,滋润了几十年来早就粗鄙无文的大陆。春风一夜,聆郎满目的文艺化书店...
    牛老汉阅读 4,145评论 4 17