使用带有 Spring 的 Data Grid
Red Hat Data Grid 复制链接链接已复制到粘贴板!
Data Grid 是一个高性能分布式内存数据存储。
- 无架构数据结构
- 将不同对象存储为键值对的灵活性。
- 基于网格的数据存储
- 旨在在集群中分发和复制数据。
- 弹性扩展
- 动态调整节点数量,以便在不中断服务的情况下满足需求。
- 数据互操作性
- 从不同端点在网格中存储、检索和查询数据。
Data Grid 文档 复制链接链接已复制到粘贴板!
红帽客户门户网站中提供了 Data Grid 的文档。
Data Grid 下载 复制链接链接已复制到粘贴板!
访问红帽客户门户上的 Data Grid 软件下载。
您必须有一个红帽帐户才能访问和下载数据中心软件。
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。详情请查看 CTO Chris Wright 的信息。
第 1 章 将 Data Grid 用作 Spring Cache 供应商 复制链接链接已复制到粘贴板!
将 Data Grid 依赖项添加到应用程序中,并使用 Spring Cache 注解在嵌入式或远程缓存中存储数据。
1.1. 使用 Data Grid 设置 Spring 缓存 复制链接链接已复制到粘贴板!
将 Data Grid 依赖项添加到 Spring 应用程序项目中。如果您在 Data Grid Server 部署中使用远程缓存,您还应配置 Hot Rod 客户端属性。
Data Grid 仅支持 Spring 版本 6。
流程
将 Data Grid 和 Spring 集成模块添加到您的
pom.xml中。-
远程缓存:
infinispan-spring6-remote 嵌入式缓存:
infinispan-spring6-embedded提示Spring Boot 用户可以添加以下工件而不是
infinispan-spring6-embedded:-
对于 Spring Boot 3 添加
infinispan-spring-boot3-starter-embedded
-
对于 Spring Boot 3 添加
-
远程缓存:
配置 Hot Rod 客户端,以在
hotrod-client.properties文件中连接到您的 Data Grid Server 部署。infinispan.client.hotrod.server_list = 127.0.0.1:11222 infinispan.client.hotrod.auth_username=admin infinispan.client.hotrod.auth_password=changeme
infinispan.client.hotrod.server_list = 127.0.0.1:11222 infinispan.client.hotrod.auth_username=admin infinispan.client.hotrod.auth_password=changemeCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Spring Cache 依赖项
远程缓存
嵌入式缓存
1.2. 将 Data Grid 用作 Spring Cache 供应商 复制链接链接已复制到粘贴板!
将 @EnableCaching 注释添加到您的其中一个配置类,然后添加 @Cacheable 和 @CacheEvict 注释以使用远程或嵌入式缓存。
先决条件
- 将 Data Grid 依赖项添加到应用程序项目中。
- 使用 Data Grid Server 部署,请创建所需的远程缓存并配置 Hot Rod 客户端属性。
流程
使用以下方法之一在应用程序上下文中启用缓存注解:
声明
Copy to Clipboard Copied! Toggle word wrap Toggle overflow programmatic
@EnableCaching @Configuration public class Config { }@EnableCaching @Configuration public class Config { }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注解具有
@Cacheable的方法,以缓存返回值。提示要直接引用缓存中的条目,您必须包含
key属性。-
使用
@CacheEvict注解方法,从缓存中删除旧条目。
1.3. Spring Cache 注解 复制链接链接已复制到粘贴板!
@Cacheable 和 @CacheEvict 注释向方法添加缓存功能。
@Cacheable- 在缓存中存储返回值。
@CacheEvict- 通过删除旧条目来控制缓存大小。
@Cacheable
将 Book 对象作为示例,如果您在使用 BookDao#findBook (Integer bookId) 等方法从数据库加载后缓存每个实例,您可以添加 @Cacheable 注解,如下所示:
@Transactional
@Cacheable(value = "books", key = "#bookId")
public Book findBook(Integer bookId) {...}
@Transactional
@Cacheable(value = "books", key = "#bookId")
public Book findBook(Integer bookId) {...}
在前面的示例中,当 findBook (Integer bookId) 返回 Book 实例时,它将存储在名为 books 的缓存中。
@CacheEvict
使用 @CacheEvict 注释,您可以指定是否要驱除整个 书 缓存,或者仅驱除与特定 #bookId 匹配的条目。
整个缓存驱除
使用 @CacheEvict 给 deleteAllBookEntries () 方法添加 allEntries 参数,如下所示:
@Transactional
@CacheEvict (value="books", key = "#bookId", allEntries = true)
public void deleteAllBookEntries() {...}
@Transactional
@CacheEvict (value="books", key = "#bookId", allEntries = true)
public void deleteAllBookEntries() {...}
基于条目的驱除
使用 @CacheEvict 标注 deleteBook (Integer bookId) 方法,并指定与该条目关联的密钥,如下所示:
@Transactional
@CacheEvict (value="books", key = "#bookId")
public void deleteBook(Integer bookId) {...}
@Transactional
@CacheEvict (value="books", key = "#bookId")
public void deleteBook(Integer bookId) {...}
1.4. 为缓存操作配置超时 复制链接链接已复制到粘贴板!
Data Grid Spring Cache 提供程序默认为在执行读写操作时阻止行为。缓存操作是同步的,不会超时。
如果需要,您可以配置最长时间,以等待操作在超时前完成。
流程
在 Spring embedded
CacheManagerFactoryBean 或上的应用程序上下文 XML 中配置以下超时属性。SpringRemoteCacheManagerFactoryBean对于远程缓存,您还可以将这些属性添加到
hotrod-client.properties文件中。
| 属性 | 描述 |
|---|---|
|
|
指定用于等待读取操作完成的时间(以毫秒为单位)。默认值为 |
|
|
指定用于等待写入操作完成的时间(以毫秒为单位)。默认值为 |
以下示例显示了 SpringRemoteCacheManagerFactoryBean 的上下文 XML 中的超时属性:
第 2 章 使用 Spring Session 外部调整会话 复制链接链接已复制到粘贴板!
将 Spring 应用程序的会话数据存储在 Data Grid 缓存中,并独立于容器。
2.1. 使用 Spring Session 外部调整会话 复制链接链接已复制到粘贴板!
使用 Spring Session API 将会话数据外部化到 Data Grid。
流程
将依赖项添加到
pom.xml中。-
嵌入式缓存:
infinispan-spring6-embedded 远程缓存:
infinispan-spring6-remote以下示例是远程缓存:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
嵌入式缓存:
指定适当的
FactoryBean以公开CacheManager实例。-
嵌入式缓存:
Spring embeddedCacheManagerFactoryBean -
远程缓存:
SpringRemoteCacheManagerFactoryBean
-
嵌入式缓存:
使用适当的注解启用 Spring Session。
-
嵌入式缓存
:@EnableInfinispanEmbeddedHttpSession 远程缓存
:@EnableInfinispanRemoteHttpSession这些注解有可选参数:
-
maxInactiveIntervalInSeconds设置会话过期时间(以秒为单位)。默认值为1800。 -
cacheName指定存储会话的缓存名称。默认为sessions。
-
-
嵌入式缓存
以下示例显示了完整的、基于注解的配置: