当前位置 : 主页 > 编程语言 > 其它开发 >

缓存模式概要

来源:互联网 收集:自由互联 发布时间:2022-06-01
背景 在大部分C端项目中,如果想提升系统并发能力,需要上缓存。但是缓存的实现方式多种多样,本文主要穿透实现,直接阐述设计模式上的概念,方便各种实现对号入座。 概念 So
背景

在大部分C端项目中,如果想提升系统并发能力,需要上缓存。但是缓存的实现方式多种多样,本文主要穿透实现,直接阐述设计模式上的概念,方便各种实现对号入座。

概念
  • SoR(System-of-Record )
    记录系统,这里指的就是实际数据存放的系统,一般指业务对应的数据库
分类 1. Cache-aside

  • 读取伪代码

    点击查看代码
    v = cache.get(k)
    if (v == null) {
      v = sor.get(k)
      cache.put(k, v)
    }
    
  • 写入伪代码

    点击查看代码
    v = newV
    sor.put(k, v)
    cache.put(k, v)
    

这种模式下,需要应用程序嵌入缓存处理的逻辑:
- 在查询时,判断缓存是否存在记录,有直接返回;没有则从SoR中获取,再更新缓存。
- 在写入时,缓存必须和记录系统一起更新

2. Cache-as-SoR

缓存即 SoR 模式: 使用缓存和使用记录系统无差别(无感知)。这种模式下对读写场景需要做具体实现:

2.1 读场景
  • Read-through
    读场景下,一般采用Read-through模式,缓存中间件提供一个loader组件,对应用程序来说只与loader交互,实际底层并不关心实现。
2.2 写场景

写场景下,主要描述如何更新缓存,有以下两种选择

  • Write-through
    更新数据时,缓存中间件提供一个write组件,对应用程序来说只需要知道更新了数据。具体逻辑由组件实现,去更新记录系统,并更新缓存
  • Write-behind
    在更新数据的时候,只更新缓存,不更新数据库,从而提高数据更新的响应速度。缓存会异步地批量更新数据库,代价就是数据不是强一致的。
参考
  • https://www.ehcache.org/documentation/3.10/caching-patterns.html
网友评论