缓存 - HongZhaoHua/jstarcraft-core GitHub Wiki

缓存类型

Java的缓存类型分为堆内缓存堆外缓存两种.

类型 优势 劣势
堆内缓存 读写无需序列化与反序列化,速度快 会受到JVM的限制(GC时间与堆空间)
堆外缓存 不受到JVM的限制,通过硬盘与网络达到接近无限的容量 读写需要序列化与反序列化,速度慢

缓存模式

缓存模式分为Cache AsideCache as Record两种.

  • Cache Aside顾名思义,即由代码维护缓存;

读/写穿透(Read/Write-Through)

​ 读场景,尝试从缓存读取数据,如果失败,则从记录获取数据并添加到缓存中(自动过期);

​ 写场景,尝试将数据写到记录,如果成功,则将数据从缓存中移除(手动过期);

  • Cache as Record顾名思义,即将缓存当记录(某种数据源),由框架负责维护缓存与记录之间的一致性;

缓存管理

缓存管理主要涉及回收机制同步机制.

  • 回收机制:保证缓存的内存使用会保持在一个稳定的范围.
  • 同步机制:保证缓存的数据源负载会保持在一个稳定的范围.

缓存管理自动化能保证对内存的增删改操作会自动更新到数据源.让使用者不必再与各种回收问题与同步问题纠缠.为领域驱动设计测试驱动开发提供基础保障.


JStarCraft的缓存模块(cache)

缓存模块基于堆内缓存实现了Cache as Record模式.

通过延时,批量,合并,限流等方式,能够极大降低数据源的负载.

缓存模块实现多种瞬时化策略持久化策略.

瞬时化策略控制缓存中的数据如何回收?

UserDefinedTransienceStrategy

  • 基于空间

先进先出(First In First Out)和最近最少使用(Least Recently Used)

LeastRecentlyUsedTransienceStrategy

  • 基于时间

存活期(Time To Live)和空闲期(Time To Idle)

DelayedTransienceStrategy

持久化策略控制缓存中的数据如何同步?

PromptPersistenceStrategy

  • 基于队列

QueuePersistenceStrategy

  • 基于定时

SchedulePersistenceStrategy