第 2 章 本地缓存


虽然 Data Grid 在集群模式中特别有意义,但它还提供非常强大的本地模式。在这个模式中,它充当类似于 ConcurrentHashMap 的简单内存中数据缓存。

但为什么要使用本地缓存而不是映射?缓存提供很多简单映射功能,包括 write-through 和 write-behind 到持久性存储,驱除条目以防止内存不足和过期。

Data Grid 的 Cache 接口将 JDK 的 ConcurrentMap criu-criu making 从映射扩展到 Data Grid 简单。

Data Grid 缓存也支持事务,与现有事务管理器集成或运行单独的事务管理器。本地缓存事务有两个选择:

  1. 何时锁定?在写入操作中或用户明确调用 AdvancedCache.lock (keys) 时,pessimistic 锁定 锁定密钥。Optimistic locking 仅在事务提交期间锁定密钥,而是在提交时抛出 WriteSkewCheckException,如果在当前事务读取它们后另一个事务修改了同一密钥,则只会在提交时抛出 WriteSkewCheckException。
  2. 隔离级别。我们 支持已提交且 可重复读取

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");

如果您将其配置为使用事务,配置验证会抛出异常,则对不支持的功能进行简单的缓存检查。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.