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

缺点:

  • 并发
  • 容量
  • 过期策略


为了解决本地缓存数据的实时性问题,目前大量使用的是结合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 缓存


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

上一篇:DDD领域驱动设计实战-聚合(Aggregate)和聚合根(AggregateRoot)(下)


下一篇:总结Python中的字符串格式化