你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:在 Java 中使用 Azure Cache for Redis 和 Redisson Redis 客户端
在本快速入门中,你将 Azure Cache for Redis 合并到 Java 应用中,该应用使用 Redisson Redis 客户端和 JCP 标准 JCache API。 这些服务使用户可以访问安全专用缓存,该缓存可从 Azure 内的任何应用程序进行访问。 针对如何选择要用于 Redis 连接的 Azure 标识,本文提供了两个选项。
跳到 GitHub 上的代码
本快速入门使用 Maven 原型功能为应用生成基架。 快速入门指导你修改生成的代码,从而实现工作示例应用。 如果要直接跳到已完成的代码,请参阅 GitHub 上的 Java 快速入门。
先决条件
- Azure 订阅 - 创建免费帐户
- 使用 Microsoft Entra ID 进行缓存身份验证
- Apache Maven
创建 Azure Redis 缓存
若要创建缓存,请登录到 Azure 门户。 在门户菜单上,选择“创建资源”。
在“入门”页上的搜索框中键入“Azure Cache for Redis”。 在搜索结果中找到“Azure Cache for Redis”,然后选择“创建”。
在“新建 Redis 缓存”窗格的“基本信息”选项卡上,配置缓存的以下设置:
设置 操作 说明 订阅 选择 Azure 订阅。 用于创建 Azure Cache for Redis 的新实例的订阅。 资源组 选择一个资源组,或者选择“新建”并输入新的资源组名称。 要在其中创建缓存和其他资源的资源组的名称。 将所有应用资源放入一个资源组可以轻松地统一管理或删除这些资源。 DNS 名称 输入唯一名称。 缓存名称必须是包含 1 到 63 个字符的字符串,只能包含数字、字母和连字符。 该名称必须以数字或字母开头和结尾,且不能包含连续的连字符。 缓存实例的主机名为 \<DNS name>.redis.cache.windows.net
。位置 选择一个位置。 一个靠近其他使用缓存的服务的 Azure 区域。 缓存 SKU 选择 SKU。 此 SKU 决定可用于缓存的大小、性能和功能参数。 有关详细信息,请参阅 Azure Cache for Redis 概述。 缓存大小 选择缓存大小。 有关详细信息,请参阅 Azure Cache for Redis 概述。 选择“网络”选项卡,或选择“下一步:网络”。
在“网络”选项卡上,选择用于缓存的连接方法。
选择“高级”选项卡,或选择“下一步:高级”。
在“高级”窗格中,根据以下信息验证或选择身份验证方法:
- 默认情况下,对于新的“基本”、“标准”或“高级”缓存,“Microsoft Entra 身份验证”将处于启用状态,而“访问密钥身份验证”则处于禁用状态。
- 对于“基本”或“标准”缓存,可以选择非 TLS 端口的选项。
- 对于“标准”和“高级”缓存,可以选择启用可用性区域。 创建缓存后,无法禁用可用性区域。
- 对于“高级”缓存,请配置非 TLS 端口、群集、托管标识和数据持久性的设置。
重要
为了获得最佳安全性,我们建议你在可能的情况下使用 Microsoft Entra ID 和托管标识来授权针对缓存的请求。 与共享访问密钥授权相比,使用 Microsoft Entra ID 和托管标识进行授权提供了更高的安全性和易用性。 若要详细了解如何将托管标识与缓存配合使用,请参阅使用 Microsoft Entra ID 进行缓存身份验证。
(可选)选择“标记”选项卡或选择“下一步: 标记”。
(可选)如果希望对缓存资源进行分类,请在“标记”选项卡中输入标记名称和值。
选择“查看 + 创建”按钮。
在“查看 + 创建”选项卡上,Azure 会自动验证你的配置。
显示绿色的“已通过验证”消息后,选择“创建” 。
新的缓存部署需要几分钟的时间。 可以在 Azure Cache for Redis 的“概述”窗格上监视部署进度。 如果“状态”显示为“正在运行”,则表示该缓存可供使用。
从 Azure 门户检索主机名、端口和访问密钥
若要连接到你的 Azure Cache for Redis 服务器,缓存客户端需要该缓存的主机名、端口和密钥。 在某些客户端中,这些项的名称可能略有不同。 可以从 Azure 门户检索主机名、端口和访问密钥。
若要获取访问密钥,请从“资源”菜单中选择“身份验证”。 然后,选择“访问密钥”选项卡。
若要获取缓存的主机名和端口,请从“资源”菜单中选择“概述”。 主机名的格式为 <DNS 名称>.redis.cache.windows.net。
设置工作环境
本节中的步骤展示了两个选项,介绍如何选择用于 Redis 连接的 Azure 标识。 示例代码查看 AUTH_TYPE
环境变量的值,并根据值执行操作。
标识选项 1:使用 Redis 密钥进行身份验证
根据操作系统,为缓存的主机名和主访问密钥添加环境变量。 打开命令提示符或终端窗口,设置以下值:
export REDIS_CACHE_HOSTNAME=<your-host-name>.redis.cache.windows.net
export REDIS_CACHE_KEY=<your-primary-access-key>
export AUTH_TYPE=RedisKey
将占位符替换为以下值:
<your-host-name>
:在 Azure 门户中从 Azure Cache for Redis 资源的“属性”部分获取的 DNS 主机名。<your-primary-access-key>
:在 Azure 门户中从 Azure Cache for Redis 资源的“访问密钥”部分获取的主访问密钥。
标识选项 2:使用 Microsoft Entra ID 进行身份验证
根据操作系统,为缓存的主机名和用户名添加环境变量。 打开命令提示符或终端窗口,设置以下值:
export REDIS_CACHE_HOSTNAME=<your-host-name>.redis.cache.windows.net
export USER_NAME=<user-name>
export AUTH_TYPE=MicrosoftEntraID
将占位符替换为以下值:
<your-host-name>
:在 Azure 门户中从 Azure Cache for Redis 资源的“属性”部分获取的 DNS 主机名。<user-name>
:托管标识或服务主体的对象 ID。
新建 Java 应用
使用 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.8.2</version>
</dependency>
<dependency>
<groupId>org.redisson</groupId>
<artifactId>redisson</artifactId>
<version>3.24.3</version>
</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(){
if ("MicrosoftEntraID".equals(System.getenv("AUTH_TYPE"))) {
System.out.println("Auth with Microsoft Entra ID");
return getConfigAuthWithAAD();
} else if ("RedisKey".equals(System.getenv("AUTH_TYPE"))) {
System.out.println("Auth with Redis key");
return getConfigAuthWithKey();
}
System.out.println("Auth with Redis key");
return getConfigAuthWithKey();
}
private static Config getConfigAuthWithKey() {
// Connect to the Azure Cache for Redis over the TLS/SSL port using the key
Config redissonconfig = new Config();
redissonconfig.useSingleServer().setPassword(System.getenv("REDIS_CACHE_KEY"))
.setAddress(String.format("rediss://%s:6380", System.getenv("REDIS_CACHE_HOSTNAME")));
return redissonconfig;
}
private static Config getConfigAuthWithAAD() {
//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("acca5fbb-b7e4-4009-81f1-37e38fd66d78/.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:6380", System.getenv("REDIS_CACHE_HOSTNAME")))
.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;
}
}
此代码展示了如何使用 Microsoft Entra ID 和 Redisson 客户端库中的 JCache API 支持连接到 Azure Cache for Redis 实例。 此代码还在缓存中存储和检索字符串值。 有关 JCache 的详细信息,请参阅 JCache 规范。
保存 App.java。
生成并运行应用
执行以下 Maven 命令来生成并运行应用:
在以下输出中,可以看到 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
的资源组。 在结果列表中的资源组上,选择“测试资源”,然后选择“删除资源组”。键入资源组的名称来确认删除,然后选择“删除”。
片刻之后,将会删除该资源组及其包含的所有资源。
后续步骤
本快速入门介绍了如何通过应用 Redisson Redis 客户端和 JCache 的 Java 应用程序使用 Azure Cache for Redis。 请继续学习下一个快速入门,将 Azure Redis 缓存与 ASP.NET Web 应用配合使用。