缓存

1.基本思想

  • 避免用户在请求数据的时候获取速度过于缓慢,所以我们在数据库之上增加了缓存这一层来弥补。

2.本地缓存解决方案

  • 常见的有Ehcache、guavaCache、Caffeine Cache等,性能最优的为Caffeine cache。
  • 常见的单体架构使用 Nginx 来做负载均衡,部署两个相同的服务到服务器,两个服务使用同一个数据库,并且使用的是本地缓存。

    3.为什么要用分布式缓存?而不用本地缓存?

  • 本地缓存存在局限性:

    • 本地缓存对分布式架构支持不友好,比如同一个相同的服务部署在多台机器上的时候,各个服务之间的缓存是无法共享的,因为本地缓存只在当前机器上有。
    • 本地缓存容量受服务部署所在的机器限制明显。 如果当前系统服务所耗费的内存多,那么本地缓存可用的容量就很少。

4.缓存读写模式/更新策略/处理流程

  • Cache Aside Pattern(旁路缓存模式)
    • 读:从 cache 中读取数据,读取到就直接返回 。读取不到的话,先从 DB 加载,写入到 cache 后返回响应。
    • 写:更新 DB,然后直接删除 cache 。
  • Read/Write Through Pattern(读写穿透)
    • 读:从 cache 中读取数据,读取到就直接返回 。读取不到的话,先从 DB 加载,写入到 cache 后返回响应。
    • 写:先查 cache,cache 中不存在,直接更新 DB。 cache 中存在,则先更新 cache,然后 cache 服务自己更新 DB(同步更新 cache 和 DB)。
  • Write Behind Pattern(异步缓存写入)
    • 读:从 cache 中读取数据,读取到就直接返回 。读取不到的话,先从 DB 加载,写入到 cache 后返回响应。
    • 写:无论是否存在,都直接跟新缓存,最好异步批量的方式来更新 DB。