6.11. 基于 JDBC 字符串的缓存存储


基于 JDBC 字符串的缓存存储 JdbcStringBasedStore,使用 JDBC 驱动程序在底层数据库中加载和存储值。

基于 JDBC 字符串的缓存存储:

  • 在表格中,将每个条目存储在其自己的行中,以增加并发负载的吞吐量。
  • 使用简单的单对一映射,利用 key-to-string-mapper 接口将每个键映射到 String 对象。
    Data Grid 提供处理原语类型的默认实施 DefaultTwoWayKey2StringMapper

除了用于存储缓存条目的 data 表外,存储还会创建一个用于存储元数据的 _META 表。此表用于确保任何现有数据库内容与当前的 Data Grid 版本和配置兼容。

注意

默认情况下,Data Grid 共享不存储,这意味着集群中的每个节点上的所有节点都写入底层存储。如果您希望操作只写入底层数据库一次,您必须将 JDBC 存储配置为共享。

分段

JdbcStringBasedStore 默认使用分段,并要求数据库表中的列表示条目所属的片段。

6.11.1. 配置基于 JDBC 字符串的缓存存储

使用可以连接到数据库的基于 JDBC 字符串的缓存存储配置 Data Grid 缓存。

先决条件

  • 远程缓存:将数据库驱动程序复制到 Data Grid Server 安装中的 server/lib 目录。
  • 嵌入式缓存:将 infinispan-cachestore-jdbc 依赖项添加到 pom 文件中。

    <dependency>
      <groupId>org.infinispan</groupId>
      <artifactId>infinispan-cachestore-jdbc</artifactId>
    </dependency>
    Copy to Clipboard Toggle word wrap

流程

  1. 使用以下方法之一创建基于 JDBC 字符串的缓存存储配置:

    • 声明性地添加 persistence 元素或字段,然后使用以下 schema 命名空间添加 string-keyed-jdbc-store

      xmlns="urn:infinispan:config:store:jdbc:15.0"
      Copy to Clipboard Toggle word wrap
    • 以编程方式,将以下方法添加到 ConfigurationBuilder 中:

      persistence().addStore(JdbcStringBasedStoreConfigurationBuilder.class)
      Copy to Clipboard Toggle word wrap
  2. 使用 dialect 属性或 dialect () 方法指定数据库的 dialect。
  3. 根据情况,配置基于 JDBC 字符串的缓存存储的任何属性。

    例如,指定缓存存储是否使用 shared 属性或 shared () 方法与多个缓存实例共享。

  4. 添加 JDBC 连接工厂,以便 Data Grid 可以连接到数据库。
  5. 添加存储缓存条目的数据库表。
重要

使用不当的数据类型配置 string-keyed-jdbc-store 可能会导致加载或存储缓存条目时出现异常。如需更多信息,以及作为 Data Grid 版本一部分测试的数据类型列表,请参阅为 Data Grid string-keyed-jdbc-store persistence (Login required)测试的数据库设置

基于 JDBC 字符串的缓存存储配置

XML

<distributed-cache>
  <persistence>
    <string-keyed-jdbc-store xmlns="urn:infinispan:config:store:jdbc:15.0"
                             dialect="H2">
      <connection-pool connection-url="jdbc:h2:mem:infinispan"
                       username="sa"
                       password="changeme"
                       driver="org.h2.Driver"/>
      <string-keyed-table create-on-start="true"
                          prefix="ISPN_STRING_TABLE">
        <id-column name="ID_COLUMN"
                   type="VARCHAR(255)" />
        <data-column name="DATA_COLUMN"
                     type="BINARY" />
        <timestamp-column name="TIMESTAMP_COLUMN"
                          type="BIGINT" />
        <segment-column name="SEGMENT_COLUMN"
                        type="INT"/>
      </string-keyed-table>
    </string-keyed-jdbc-store>
  </persistence>
</distributed-cache>
Copy to Clipboard Toggle word wrap

JSON

{
  "distributed-cache": {
    "persistence": {
      "string-keyed-jdbc-store": {
        "dialect": "H2",
        "string-keyed-table": {
          "prefix": "ISPN_STRING_TABLE",
          "create-on-start": true,
          "id-column": {
            "name": "ID_COLUMN",
            "type": "VARCHAR(255)"
          },
          "data-column": {
            "name": "DATA_COLUMN",
            "type": "BINARY"
          },
          "timestamp-column": {
            "name": "TIMESTAMP_COLUMN",
            "type": "BIGINT"
          },
          "segment-column": {
            "name": "SEGMENT_COLUMN",
            "type": "INT"
          }
        },
        "connection-pool": {
          "connection-url": "jdbc:h2:mem:infinispan",
          "driver": "org.h2.Driver",
          "username": "sa",
          "password": "changeme"
        }
      }
    }
  }
}
Copy to Clipboard Toggle word wrap

YAML

distributedCache:
  persistence:
    stringKeyedJdbcStore:
      dialect: "H2"
      stringKeyedTable:
        prefix: "ISPN_STRING_TABLE"
        createOnStart: true
        idColumn:
          name: "ID_COLUMN"
          type: "VARCHAR(255)"
        dataColumn:
          name: "DATA_COLUMN"
          type: "BINARY"
        timestampColumn:
          name: "TIMESTAMP_COLUMN"
          type: "BIGINT"
        segmentColumn:
          name: "SEGMENT_COLUMN"
          type: "INT"
      connectionPool:
        connectionUrl: "jdbc:h2:mem:infinispan"
        driver: "org.h2.Driver"
        username: "sa"
        password: "changeme"
Copy to Clipboard Toggle word wrap

ConfigurationBuilder

ConfigurationBuilder builder = new ConfigurationBuilder();
builder.persistence().addStore(JdbcStringBasedStoreConfigurationBuilder.class)
      .dialect(DatabaseType.H2)
      .table()
         .dropOnExit(true)
         .createOnStart(true)
         .tableNamePrefix("ISPN_STRING_TABLE")
         .idColumnName("ID_COLUMN").idColumnType("VARCHAR(255)")
         .dataColumnName("DATA_COLUMN").dataColumnType("BINARY")
         .timestampColumnName("TIMESTAMP_COLUMN").timestampColumnType("BIGINT")
         .segmentColumnName("SEGMENT_COLUMN").segmentColumnType("INT")
      .connectionPool()
         .connectionUrl("jdbc:h2:mem:infinispan")
         .username("sa")
         .password("changeme")
         .driverClass("org.h2.Driver");
Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat