第 2 章 本地缓存
虽然 Data Grid 在集群模式中特别有意义,但它还提供非常强大的本地模式。在这个模式中,它充当类似于 ConcurrentHashMap
的简单内存中数据缓存。
但为什么要使用本地缓存而不是映射?缓存提供很多简单映射功能,包括 write-through 和 write-behind 到持久性存储,驱除条目以防止内存不足和过期。
Data Grid 的 Cache
接口将 JDK 的 ConcurrentMap
criu-criu making 从映射扩展到 Data Grid 简单。
Data Grid 缓存也支持事务,与现有事务管理器集成或运行单独的事务管理器。本地缓存事务有两个选择:
-
何时锁定?在写入操作中或用户明确调用
AdvancedCache.lock (keys)
时,pessimistic 锁定 锁定密钥。Optimistic locking 仅在事务提交期间锁定密钥,而是在提交时抛出WriteSkewCheckException
,如果在当前事务读取它们后另一个事务修改了同一密钥,则只会在提交时抛出 WriteSkewCheckException。 - 隔离级别。我们 支持已提交且 可重复读取。
2.1. 简单缓存
传统的本地缓存使用与集群缓存相同的架构,即它们使用拦截器堆栈。这样,可以重复使用许多实施。但是,如果不需要高级功能并且性能更为重要,则可以使用拦截器堆栈,也可以使用简单的缓存。
那么,哪些功能被剥离?从配置的角度来看,简单的缓存不支持:
- 事务和调用批处理
- Persistence (缓存存储和加载程序)
- 自定义拦截器(没有拦截器堆栈!)
- 索引
- transcoding
- 存储为二进制(对本地缓存非常有用)
从 API 的角度来看,这些功能会抛出异常:
- 添加自定义拦截器
- 分布式执行器框架
那么,是什么?
- 基本映射类 API
- 缓存监听程序(本地监听程序)
- 过期
- 驱除
- 安全
- JMX 访问
统计(但在最大性能方面,建议使用 statistics-available=false 来将此关闭)。
- 声明性配置
<local-cache name="mySimpleCache" simple-cache="true"> <!-- expiration, eviction, security... --> </local-cache>
- 编程配置
DefaultCacheManager cm = getCacheManager(); ConfigurationBuilder builder = new ConfigurationBuilder().simpleCache(true); cm.defineConfiguration("mySimpleCache", builder.build()); Cache cache = cm.getCache("mySimpleCache");
如果您将其配置为使用事务,配置验证会抛出异常,则对不支持的功能进行简单的缓存检查。