在本快速入门中,你将 Azure Cache for Redis 合并到 Java 应用中,该应用使用 Redisson Redis 客户端和 JCP 标准 JCache API。 这些服务使用户可以访问安全专用缓存,该缓存可从 Azure 内的任何应用程序进行访问。 针对如何选择要用于 Redis 连接的 Azure 标识,本文提供了两个选项。
本快速入门使用 Maven 原型功能为应用生成基架。 快速入门指引你修改生成的代码,从而实现可运行的示例应用。 如果要直接跳到已完成的代码,请参阅 GitHub 上的 Java 快速入门。
- Azure 订阅 - 创建订阅
- 使用 Microsoft Entra ID 进行缓存身份验证
- Apache Maven
若要创建 Azure 托管 Redis 实例,请登录到 Azure 门户并选择“ 创建资源”。
在“新建”页面上的搜索框中键入“Azure Cache for Redis”。
在 “新建 Redis 缓存 ”选项卡上,在“基本信息”上配置新缓存的设置。
设置 选择值 DESCRIPTION 订阅 单击下拉箭头并选择你的订阅。 创建新的 Azure 托管 Redis 实例所需的订阅。 资源组 单击下拉箭头并选择一个资源组,或者选择新建并输入新的资源组名称。 要在其中创建缓存和其他资源的资源组的名称。 将所有应用资源放入一个资源组可以轻松地统一管理或删除这些资源。 名称 输入在区域中唯一的名称。 如果与缓存的区域名称组合,缓存名称必须为介于 1 到 63 个字符的字符串,且只能包含数字、字母或连字符。 (如果缓存名称长度少于 45 个字符,则它应该可以在所有当前可用的区域中正常工作。)该名称必须以数字或字母开头和结尾,且不能包含连续的连字符。 缓存实例的主机名为 \<DNS name\>.\<Azure region\>.redis.chinacloudapi.cn
。区域 下拉并选择一个位置。 Azure 托管 Redis 在选定的 Azure 区域中可用。 数据层 选择 内存中 以实现高性能,或 选择“闪存 ”以降低性能缓存 内存中层包括 平衡层、 内存优化层和 计算优化层。 使用 闪存 级别来利用内存(RAM)和磁盘(SSD)数据存储。 缓存大小 下拉并选择大小。 缓存大小取决于层。 最小大小为均衡层。 最大的内存中层为内存优化层。 性能 下拉并选择性能首选项。 性能取决于 vCPU 的数量。 vCPU 的数量因层而异。 计算优化具有最多的 vCPU。 有关选择正确的性能层的指导,请参阅 “选择适当的层”。
重要
使用超过 120 GB 存储的所有内存中层都处于公共预览状态,包括内存优化 M150 及更高版本;平衡 B150 及更高版本;和计算优化 X150 及更高版本。 所有这些层及更高版本均以公共预览版提供。
所有闪存优化层均以公共预览版提供。
选择 “下一步:网络 ”,然后选择 “公共终结点 ”或 “专用终结点”。
选择 “下一步:活动异地复制”。 若要使用活动异地复制,必须在预配期间启用它。 以后无法将不具有活动异地复制的缓存添加到或加入活动异地复制组。 有关详细信息,请参阅为 Azure 托管 Redis 实例配置活动异地复制。
选择“ 下一步:高级 ”选项卡。
配置要添加到实例的任何 Redis 模块 。
默认情况下,对于新的托管缓存:
- 已启用 Microsoft Entra ID。
- 出于安全原因,“访问密钥身份验证”处于禁用状态。
重要
为了获得最佳安全性,我们建议你在可能的情况下使用 Microsoft Entra ID 和托管标识来授权针对缓存的请求。 与共享访问密钥授权相比,使用 Microsoft Entra ID 和托管标识进行授权提供了更高的安全性和易用性。 若要详细了解如何将托管标识与缓存配合使用,请参阅使用 Microsoft Entra ID 进行缓存身份验证。
设置 群集策略:
- 使用 Enterprise 以使用 RedisSearch 或其他模块
- 将 OSS 用于群集缓存。
- 对于非聚集缓存,请使用非聚集索引(预览版)。
重要
创建 Azure 托管 Redis 实例后,无法更改群集策略。 如果使用 RediSearch,则需要企业群集策略,
NoEviction
是唯一支持的逐出策略。重要
如果在异地复制组中使用此缓存实例,则创建实例后无法更改逐出策略。 在创建缓存之前,请务必了解主节点的逐出策略。 有关活动异地复制的详细信息,请参阅活动异地复制先决条件。
重要
创建缓存实例后,无法更改模块。 必须在创建 Azure Cache for Redis 实例时启用模块。 没有在创建缓存后启用模块配置的选项。
选择下一步:标记并跳过。
选择 “下一步:查看 + 创建”。
检查设置,然后选择“创建”。
创建 Redis 实例需要几分钟时间。 可以在 Azure 托管 Redis 的“概述”页面上监视进度。 如果状态显示为正在运行,则表示该缓存可供使用。
若要创建缓存,请登录到 Azure 门户并选择“创建资源”。
在入门页的搜索框中输入Azure Cache for Redis。 然后选择创建。
在“新建 Redis 缓存”页上配置缓存的设置。
设置 选择值 DESCRIPTION 订阅 单击下拉箭头并选择你的订阅。 要在其下创建此新的 Azure Cache for Redis 实例的订阅。 资源组 单击下拉箭头并选择一个资源组,或者选择新建并输入新的资源组名称。 要在其中创建缓存和其他资源的资源组的名称。 将所有应用资源放入一个资源组可以轻松地统一管理或删除这些资源。 DNS 名称 输入唯一名称。 缓存名称必须是包含 1 到 63 个字符的字符串,只能包含数字、字母或连字符。 该名称必须以数字或字母开头和结尾,且不能包含连续的连字符。 缓存实例的主机名是 <DNS name>.redis.cache.chinacloudapi.cn。 位置 下拉并选择一个位置。 选择靠近使用缓存的其他服务的区域。 缓存 SKU 下拉并选择一个 SKU。 此 SKU 决定可用于缓存的大小、性能和功能参数。 有关详细信息,请参阅用于 Redis 的 Azure 缓存概述。 缓存大小 打开下拉列表并选择缓存的大小 有关详细信息,请参阅用于 Redis 的 Azure 缓存概述。 选择网络选项卡,或选择网络按钮(位于页面底部) 。
在网络选项卡中,选择你的连接方式。
选择“下一步: 高级”选项卡,或在页面底部选择“下一步: 高级”按钮,以查看“高级”选项卡。
- 对于“基本”或“标准”缓存,请切换非 TLS 端口的选项。 还可以选择是否要启用“Microsoft Entra 身份验证”。
- 对于“高级”缓存,请配置非 TLS 端口、群集、托管标识和数据持久性的设置。 还可以选择是否要启用“Microsoft Entra 身份验证”。
选择下一步: 标签选项卡,或选择页面底部的下一步: 标签按钮。
如果希望对资源进行分类,可选择地在标签选项卡中输入名称和值。
选择“查看 + 创建”。 随后你会转到“查看 + 创建”选项卡,Azure 将在此处验证配置。
显示绿色的“已通过验证”消息后,选择创建。
创建缓存需要一段时间。 可以在 Azure Cache for Redis 的概述页上监视进度。 如果状态显示为正在运行,则表示该缓存可供使用。
若要连接到你的 Azure Cache for Redis 服务器,缓存客户端需要该缓存的主机名、端口和密钥。 在某些客户端中,这些项的名称可能略有不同。 可以从 Azure 门户检索主机名、端口和访问密钥。
若要获取缓存的主机名和端口,请从“资源”菜单中选择“概述”。 主机名采用
<DNS name>.redis.cache.chinacloudapi.cn
形式。若要获取访问密钥,请从“资源”菜单中选择“身份验证”。 然后,选择“访问密钥”选项卡。
以下步骤演示了如何为 Java 应用设置工作环境。 可以选择使用 Microsoft Entra ID(推荐)或访问密钥来对 Azure Cache for Redis 进行身份验证。
export REDIS_CACHE_HOSTNAME=<your-host-name>.redis.cache.chinacloudapi.cn
export USER_NAME=<user-name>
export REDIS_CACHE_PORT=10000
export REDIS_CACHE_HOSTNAME=<your-host-name>.redis.cache.chinacloudapi.cn
export USER_NAME=<user-name>
export REDIS_CACHE_PORT=6380
将占位符替换为以下值:
使用 Maven 生成新的快速入门应用:
mvn archetype:generate \ -DarchetypeGroupId=org.apache.maven.archetypes \ -DarchetypeArtifactId=maven-archetype-quickstart \ -DarchetypeVersion=1.3 \ -DinteractiveMode=false \ -DgroupId=example.demo \ -DartifactId=redis-redisson-test \ -Dversion=1.0
切换到新的 redis-redisson-test 项目目录。
打开 pom.xml 文件并添加 Redisson 的依赖项:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-identity</artifactId> <version>1.15.0</version> <!-- {x-version-update;com.azure:azure-identity;dependency} --> </dependency> <dependency> <groupId>org.redisson</groupId> <artifactId>redisson</artifactId> <version>3.36.0</version> <!-- {x-version-update;org.redisson:redisson;external_dependency} --> </dependency>
保存 pom.xml 文件。
打开 App.java,将代码替换为以下代码:
package example.demo; import com.azure.core.credential.TokenRequestContext; import com.azure.identity.DefaultAzureCredential; import com.azure.identity.DefaultAzureCredentialBuilder; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.redisson.jcache.configuration.RedissonConfiguration; import javax.cache.Cache; import javax.cache.CacheManager; import javax.cache.Caching; import javax.cache.configuration.Configuration; import javax.cache.configuration.MutableConfiguration; import java.time.LocalDateTime; /** * Redis test * */ public class App { public static void main(String[] args) { Config redissonconfig = getConfig(); RedissonClient redissonClient = Redisson.create(redissonconfig); MutableConfiguration<String, String> jcacheConfig = new MutableConfiguration<>(); Configuration<String, String> config = RedissonConfiguration.fromInstance(redissonClient, jcacheConfig); // Perform cache operations using JCache CacheManager manager = Caching.getCachingProvider().getCacheManager(); Cache<String, String> map = manager.createCache("test", config); // Simple get and put of string data into the cache System.out.println("\nCache Command : GET Message"); System.out.println("Cache Response : " + map.get("Message")); System.out.println("\nCache Command : SET Message"); map.put("Message", String.format("Hello! The cache is working from Java! %s", LocalDateTime.now())); // Demonstrate "SET Message" executed as expected System.out.println("\nCache Command : GET Message"); System.out.println("Cache Response : " + map.get("Message")); redissonClient.shutdown(); } private static Config getConfig() { //Construct a Token Credential from Identity library, e.g. DefaultAzureCredential / ClientSecretCredential / Client CertificateCredential / ManagedIdentityCredential etc. DefaultAzureCredential defaultAzureCredential = new DefaultAzureCredentialBuilder().build(); // Fetch a Microsoft Entra token to be used for authentication. String token = defaultAzureCredential .getToken(new TokenRequestContext() .addScopes("https://redis.azure.com/.default")).block().getToken(); // Connect to the Azure Cache for Redis over the TLS/SSL port using the key Config redissonconfig = new Config(); redissonconfig.useSingleServer() .setAddress(String.format("rediss://%s:%s", System.getenv("REDIS_CACHE_HOSTNAME"), System.getenv("REDIS_CACHE_PORT"))) .setUsername(System.getenv("USER_NAME")) // (Required) Username is Object ID of your managed identity or service principal .setPassword(token); // Microsoft Entra access token as password is required. return redissonconfig; } }
保存 App.java。
执行以下 Maven 命令来生成并运行应用:
mvn compile exec:java -Dexec.mainClass=example.demo.App
在以下输出中,可以看到 Message
键之前有一个缓存值,该值是在上次运行中设置的。 应用更新了该缓存值。
Cache Command : GET Message
Cache Response : Hello! The cache is working from Java! 2023-12-05T15:13:11.398873
Cache Command : SET Message
Cache Command : GET Message
Cache Response : Hello! The cache is working from Java! 2023-12-05T15:45:45.748667
如果你计划继续学习下一篇教程,可以保留本快速入门中创建的资源,以便重复使用。
如果已完成快速入门示例应用程序,可以删除本快速入门中创建的 Azure 资源,以免产生费用。
重要
删除资源组的操作不可逆,资源组以及其中的所有资源将被永久删除。 请确保不会意外删除错误的资源组或资源。 如果在现有资源组(其中包含要保留的资源)中为托管此示例创建了资源,可单独删除每个资源,而不是删除资源组。
登录 Azure 门户,然后选择“资源组”。
在“按名称筛选”文本框中键入资源组的名称。 本文的说明使用了名为
TestResources
的资源组。 在结果列表中的资源组上,选择“测试资源”,然后选择“删除资源组”。键入资源组的名称来确认删除,然后选择“删除”。
片刻之后,将会删除该资源组及其包含的所有资源。
在本快速入门中,你学习了如何将 Azure Cache for Redis 从 Java 应用程序与 Reis Redis 客户端和 JCache 配合使用。 请继续学习下一个快速入门,将 Azure Cache for Redis 与 ASP.NET Web 应用配合使用。