美文网首页
缓存设计模式

缓存设计模式

作者: AD刘涛 | 来源:发表于2020-09-28 11:30 被阅读0次

Cache Aside Pattern

这是最常用的设计模式了,其具体逻辑如下。

  • 失效:应用程序先从 Cache 取数据,如果没有得到,则从数据库中取数据,成功后,则存储到缓存中。
  • 命中:应用程序从 Cache 中取数据,取到后返回。
  • 更新:先把数据存到数据库中,成功后,在让缓存失效。

为什么要先把数据存储到数据库中后才让缓存失效呢?

在日常开发中,我们常常会见到这样的操作,先让缓存失效,其次更新数据库。这样的操作存在什么问题呢?

我们先假设一下,此时存在着2个并发操作:

  • 线程1是 ==> 更新操作
  • 线程2是 ==> 查询操作

线程1删除缓存后,正好赶上线程2的查询操作。由于线程2没有命中缓存,此时线程2会去数据库查询,此时此刻的数据库依旧存储的是老数据。当线程2拿到该数据时会进行缓存。当这些操作都完成后,线程1才开始更新操作。于是就出现了缓存中的数据依旧是之前的老数据,从而导致存储更新不及时,存在脏数据的情况。

当然了,Cache Aside Pattern 依旧存在并发问题,但在现实环境中,这样的情况不容易发生。具体信息可参考链接。

参考链接1
参考链接2
参考链接3

相关文章

  • 缓存设计模式

    Cache Aside Pattern 这是最常用的设计模式了,其具体逻辑如下。 失效:应用程序先从 Cache ...

  • 缓存设计模式

    redis使用啥的就不说了,网上资料很多,本文主要讲使用缓存的一些设计模式;以下几个缓存模式,本身是微软用在操作系...

  • 工厂方法模式和单例模式在 Laravel 框架中 ORM 搜索功

    Laravel 框架中 ORM 搜索结果缓存的实现 标签: 设计模式 工厂方法模式 单例模式 Laravel PH...

  • APP开发实战137-WebView功能设计

    36.9 WebView功能设计 在使用WebView控件时,除了设置是否支持js、缓存大小、缓存模式、文字编码类...

  • Java多线程-并发设计模式

    为了解决多线程带来的并发问题,业界总结出的一套设计模式,类似缓存更新设计模式、23种设计模式一样 并发编程领域的问...

  • 享元模式-构建简易缓存池

    本篇一起来写一个简易的缓存池,就是对象缓存池,就是设计模式中的享元模式。其实support包(Androidx一样...

  • page cache页面缓存

    为什么设计缓存? 如何设计缓存? 页面缓存都缓存什么?

  • iOS SDWebImage源码分析

    1.SDWebImage 默认内存和磁盘都缓存的,所以它属于二级缓存机制的设计模式。2.SDWebImage 默认...

  • <--个人成长笔记系列-->缓存和零碎点...

    JAVA知识点: (掌握)设计模式之 Factory (掌握)并发环境下,先操作数据库还是先操作缓存?缓存穿透...

  • 缓存设计

    目录 缓存设计需要考虑的地方 项目代码编写 mybaits缓存设计原理 guava缓存设计原理 本地缓存设计需要考...

网友评论

      本文标题:缓存设计模式

      本文链接:https://www.haomeiwen.com/subject/zacduktx.html