在 Spring 中使用 Data Grid
Red Hat Data Grid 复制链接链接已复制到粘贴板!
Data Grid 是一个高性能分布式内存数据存储。
- 无架构数据结构
- 将不同对象存储为键值对的灵活性。
- 基于网格的数据存储
- 旨在在集群中分发和复制数据。
- 弹性扩展
- 动态调整节点数量,以便在不中断服务的情况下满足需求。
- 数据互操作性
- 从不同端点在网格中存储、检索和查询数据。
Data Grid 文档 复制链接链接已复制到粘贴板!
红帽客户门户网站中提供了 Data Grid 的文档。
Data Grid 下载 复制链接链接已复制到粘贴板!
访问 红帽客户门户上的 Data Grid 软件下载。
您必须有一个红帽帐户才能访问和下载数据中心软件。
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 使用 Data Grid 作为 Spring Cache 供应商 复制链接链接已复制到粘贴板!
在应用程序中添加 Data Grid 依赖项,并使用 Spring Cache 注解将数据存储在嵌入式或远程缓存中。
1.1. 使用 Data Grid 设置 Spring 缓存 复制链接链接已复制到粘贴板!
将 Data Grid 依赖项添加到您的 Spring 应用程序项目中。如果您在 Data Grid 服务器部署中使用远程缓存,您还应配置 Hot Rod 客户端属性。
流程
将 Data Grid 和 Spring 集成模块添加到您的
pom.xml中。-
远程缓存:
infinispan-spring5-remote 嵌入式缓存:
infinispan-spring5-embedded提示Spring Boot 用户可以添加
infinispan-spring-boot-starter-embedded而不是infinispan-spring5-embedded工件。
-
远程缓存:
配置 Hot Rod 客户端,以在
hotrod-client.properties文件中连接到您的 Data Grid 服务器部署。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 Dao findfindBook (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) {...}
在上例中,当 找到书签(Integer bookId) 时,它会返回一个书签实例,它存储在名为 Book 的缓存中。
@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 供应商默认为阻止行为。缓存操作是同步的,且不会超时。
如果需要,您可以配置等待操作完成的最长时间,然后再超时。
流程
在
SpringEmbeddedCacheManagerFactoryBean或SpringRemoteCacheManagerFactoryBean上为应用程序配置以下超时属性。对于远程缓存,您还可以将这些属性添加到
hotrod-client.properties文件中。
| 属性 | 描述 |
|---|---|
|
|
以毫秒为单位指定等待读取操作完成的时间(以毫秒为单位)。默认值为 |
|
|
指定等待写入操作完成的时间(以毫秒为单位)。默认值为 |
以下示例显示了 SpringRemoteCacheManagerFactoryBean 上下文 XML 中的 timeout 属性:
第 2 章 使用 Spring Session 进行外部化会话 复制链接链接已复制到粘贴板!
将 Spring 应用程序的会话数据存储在 Data Grid 缓存中,并独立于容器。
2.1. 使用 Spring Session 进行外部化会话 复制链接链接已复制到粘贴板!
使用 Spring Session API 将会话数据外部化到 Data Grid。
流程
在您的
pom.xml中添加依赖项。-
嵌入式缓存:
infinispan-spring5-embedded 远程缓存:
infinispan-spring5-remote以下示例用于远程缓存:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
嵌入式缓存:
指定适当的
FactoryBean来公开CacheManager实例。-
嵌入式缓存:
SpringEmbededCacheManagerFactoryBean -
远程缓存:
SpringRemoteCacheManagerFactoryBean
-
嵌入式缓存:
使用适当的注解启用 Spring Session。
-
嵌入式缓存
:@EnableInfinispanEmbeddedHttpSession 远程缓存
:@EnableInfinispanRemoteHttpSession这些注解具有可选参数:
-
maxInactiveIntervalInSeconds以秒为单位设置会话过期时间。默认值为1800。 -
cacheName指定存储会话的缓存名称。默认值为会话。
-
-
嵌入式缓存
以下示例显示了基于注解的完整配置: