6.11. JDBC 字符串的缓存存储


JDBC String 型缓存存储 JdbcStringBasedStore,使用 JDBC 驱动程序在底层数据库中加载和存储值。

JDBC String-Based 缓存存储:

  • 将每个条目存储在表中,以提高并发负载吞吐量。
  • 使用一个简单的一对一映射,使用键到 字符串接口将每个键 映射到 String 对象。
    数据网格提供了一个处理原语类型的默认实施 DefaultTwoWayKey2StringMapper

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

注意

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

分段

JdbcStringBasedStore 默认使用分段,它需要一个数据库表中的列来代表条目属于的片段。

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

使用 JDBC 字符串的缓存配置可连接到数据库的数据网格缓存。

先决条件

  • 远程缓存:将数据库驱动程序复制到 Data Grid 服务器安装的 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 字符串的缓存存储配置:

    • 声明性,添加 持久性 元素或字段,然后添加带有以下架构命名空间的 string-keyed-jdbc-store

      xmlns="urn:infinispan:config:store:jdbc:13.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 连接工厂,使数据网格能够连接到数据库。
  5. 添加存储缓存条目的数据库表。
JDBC 字符串的缓存存储配置

XML

<distributed-cache>
  <persistence>
    <string-keyed-jdbc-store xmlns="urn:infinispan:config:store:jdbc:13.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