天天看点

阿里华为等大厂的本地缓存、分布式缓存解决方案详解(下)

缺点:

  • 并发
  • 容量
  • 过期策略

为了解决本地缓存数据的实时性问题,目前大量使用的是结合ZooKeeper的自动发现机制,实时变更本地静态变量缓存:

美团的基础配置组件MtConfig,采用的就是类似原理,使用静态变量缓存,结合ZooKeeper的统一管理,做到自动动态更新缓存。

  • Mtconfig实现图
阿里华为等大厂的本地缓存、分布式缓存解决方案详解(下)

这类缓存,优点是能直接在heap区内读写,最快也最方便。

缺点同样是受heap区域影响,缓存的数据量非常有限,同时缓存时间受GC影响。

主要满足单机场景下的小数据量缓存需求,同时对缓存数据的变更无需太敏感,如一般配置管理、基础静态数据等场景。

3.1.2 Ehcache(使用度较低)

3.1.3 Guava Cache(常用)

3.1.4 Spring Cache(常用)

3.1.5 本地缓存的缺陷

  • 无法在多个集群环境同步。当集群规模增大,缓存的读写放大
  • 在JVM中长期占用内存,如果是堆内存,会影响GC
  • 缓存数据的调度处理,影响执行业务的线程,抢资源。

所以使用集中处理缓存,单独部署管理缓存。

这也有缺点:网络请求层数增加;如果故障,缓存全部延迟或失效。不过这仍是主流的缓存方案。

3.2 分布式缓存

Memcached缓存

Redis 缓存

实际工程中,对于缓存的应用可以有多种的实战方式,包括侵入式硬编码,抽象服务化应用,以及轻量的注解式使用等。