6.8. 基于文件的缓存存储


基于文件的缓存存储在运行 Data Grid 的本地主机文件系统中提供持久性存储。对于群集缓存,基于文件的缓存存储对于每个 Data Grid 节点来说是唯一的。

警告

切勿使用共享文件系统上的基于文件系统的缓存存储,如 NFS 或 Samba 共享,因为它们不提供文件锁定功能和数据崩溃。

另外,如果您试图将事务缓存与共享文件系统搭配使用,在提交阶段写入文件时无法恢复的故障时可能会出现。

soft-Index File Stores

SoftIndexFileStore 是基于文件的缓存存储的默认实现,并将其数据存储在仅附加文件中。

当只附加文件时:

  • 达到其最大大小,Data Grid 将创建一个新文件并开始写入该文件。
  • 达到 50% 用量小于 50% 的压缩阈值,Data Grid 会将条目覆盖到新文件,然后删除旧文件。

b+ 树

为提高性能,可使用 B+ 树 在磁盘和内存中存储 SoftIndexFileStore 中仅附加文件进行索引。内存索引使用 Java 软引用来确保在 Garbage Collection (GC)中删除后重新进行重建。

由于 SoftIndexFileStore 使用 Java 软引用来保留索引内存,所以它有助于防止内存不足的情况。GC 在消耗太多内存前删除索引,同时仍然回退到磁盘。

您可以使用索引元素中的 片段 属性,或使用 index Segments () 方法来配置任意数量的 B+ 树。默认情况下,数据网格创建最多 16 个 B+ 树,这意味着最多可以有 16 个索引。有多个索引可防止对索引进行并发写入操作,并减少数据网格需要在内存中保留的条目数量。由于迭代了 soft-index 文件存储,Data Grid 会同时读取索引中的所有条目。

B+ 树中的每个条目都是节点。默认情况下,每个节点的大小限制为 4096 字节。如果键在序列化后较长,SoftIndexFileStore 会抛出异常。

分段

soft-index 文件存储始终被分段。

注意

AdvancedStore.purgeExpired () 方法在 SoftIndexFileStore 中未实现。

单个文件缓存存储

注意

单个文件缓存存储现已弃用,计划删除。

单个文件缓存存储、单一文件存储、将数据存储在文件中。数据网格还维护一个内存密钥索引,而键和值则存储在 文件中。

由于 SingleFileStore 会保留内存密钥索引和值位置,它需要额外内存,具体取决于密钥大小和键的数量。因此,不建议使用 SingleFileStore,其中键较大或者有多个密钥。

在某些情况下,single FileStore 也可能会变得碎片。如果值大小持续增加,则不会使用单一文件中的可用空间,但该条目附加到文件的末尾。只有在条目可以容纳时,才会使用该文件中的可用空间。同样,如果您从内存中删除所有条目,则单个文件存储的大小不会降低或进行碎片整理。

分段

默认情况下,单个文件缓存被分段,每个片段使用单独的实例,这样会导致多个目录。每个目录都是代表数据映射的片段的数字。

6.8.1. 配置基于文件的缓存存储

将基于文件的缓存存储添加到 Data Grid,以在主机文件系统中持久保留数据。

先决条件

  • 如果您配置嵌入缓存,请启用全局持久位置。

流程

  1. persistence 元素添加到缓存配置中。
  2. (可选)指定 true 作为 passivation 属性的值,仅在数据从内存驱除时写入基于文件的 缓存存储
  3. 包含 file-store 元素,并根据情况配置属性。
  4. 指定 false 作为 shared 属性的值。

    基于文件的缓存存储应该始终特定于每个数据网格实例。如果要在集群中使用相同的持久性,请配置共享存储,如 JDBC 字符串的缓存存储。

  5. 配置 索引 和数据元素,以指定数据网格创建索引和存储数据的位置。
  6. 如果要使用 write-behind 模式配置缓存存储,请包含 write-behind 元素。
基于文件的缓存存储配置

XML

<distributed-cache>
  <persistence passivation="true">
     <file-store shared="false">
        <data path="data"/>
        <index path="index"/>
        <write-behind modification-queue-size="2048" />
     </file-store>
  </persistence>
</distributed-cache>
Copy to Clipboard Toggle word wrap

JSON

{
  "distributed-cache": {
    "persistence": {
      "passivation": true,
      "file-store" : {
        "shared": false,
        "data": {
          "path": "data"
        },
        "index": {
          "path": "index"
        },
        "write-behind": {
          "modification-queue-size": "2048"
        }
      }
    }
  }
}
Copy to Clipboard Toggle word wrap

YAML

distributedCache:
  persistence:
    passivation: "true"
    fileStore:
      shared: "false"
      data:
        path: "data"
      index:
        path: "index"
      writeBehind:
        modificationQueueSize: "2048"
Copy to Clipboard Toggle word wrap

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.persistence().passivation(true)
       .addSoftIndexFileStore()
          .shared(false)
          .dataLocation("data")
          .indexLocation("index")
          .modificationQueueSize(2048);
Copy to Clipboard Toggle word wrap

6.8.2. 配置单个文件缓存存储

如果需要,您可以配置 Data Grid 来创建单一文件存储。

重要

单个文件存储已弃用。与单一文件存储相比,您应该使用 soft-index 文件存储提高了性能和数据一致性。

先决条件

  • 如果您配置嵌入缓存,请启用全局持久位置。

流程

  1. persistence 元素添加到缓存配置中。
  2. (可选)指定 true 作为 passivation 属性的值,仅在数据从内存驱除时写入基于文件的 缓存存储
  3. 包含 single-file-store 元素。
  4. 指定 false 作为 shared 属性的值。
  5. 根据需要配置任何其他属性。
  6. 包含 write-behind 元素,以将缓存存储配置为后面的写入操作,而不是作为写入操作。
单个文件缓存存储配置

XML

<distributed-cache>
  <persistence passivation="true">
    <single-file-store shared="false"
                       preload="true"
                       fetch-state="true"/>
  </persistence>
</distributed-cache>
Copy to Clipboard Toggle word wrap

JSON

{
  "distributed-cache": {
    "persistence" : {
      "passivation" : true,
      "single-file-store" : {
        "shared" : false,
        "preload" : true,
        "fetch-state" : true
      }
    }
  }
}
Copy to Clipboard Toggle word wrap

YAML

distributedCache:
  persistence:
    passivation: "true"
    singleFileStore:
      shared: "false"
      preload: "true"
      fetchState: "true"
Copy to Clipboard Toggle word wrap

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.persistence().passivation(true)
       .addStore(SingleFileStoreConfigurationBuilder.class)
          .shared(false)
          .preload(true)
          .fetchPersistentState(true);
Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat