新闻详情

新闻详情

首页 / 资讯中心 / 详情

Amazon MemoryDB for Redis 的 Java SDK v2 实战指南:集群、快照与 JUnit 集成测试全流程解析

发布时间:2026/9/25 2:56:41来源:尧图网络
Amazon MemoryDB for Redis 的 Java SDK v2 实战指南:集群、快照与 JUnit 集成测试全流程解析
示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载本指南基于 AWS Code Examples 仓库中javav2/example_code/memorydb目录的官方示例系统讲解如何使用 AWS SDK for Java v2 通过MemoryDbClient操作 Amazon MemoryDB for Redis——包括创建集群、创建/描述快照、删除集群等单操作示例的完整源码、命令行用法与参数含义并深入剖析 JUnit 5 集成测试MemoryDBTest的配置方式与运行原理。读完本文你将掌握 MemoryDB 集群生命周期管理的关键 API 调用模式以及如何在真实 AWS 资源上安全地测试这些代码。什么是 Amazon MemoryDB for RedisAmazon MemoryDB for Redis 是一款与 Redis 兼容、具备持久化能力的内存数据库服务提供超高性能的读写体验同时将数据持久化存储以保证不丢失。它天然支持 Redis 的数据结构与命令协议适用于需要亚毫秒级延迟且要求数据持久化的场景。在本仓库中AWS 官方提供了配套的 Java 示例代码全部基于MemoryDbClient这一同步客户端对象实现覆盖了集群与快照两条核心操作链路。源码目录结构如下javav2/example_code/memorydb/ ├── pom.xml ├── README.md └── src/ ├── main/java/com/example/memorydb/ │ ├── CreateCluster.java │ ├── CreateSnapshot.java │ ├── DeleteCluster.java │ ├── DescribeClusters.java │ ├── DescribeSnapshots.java │ └── DescribeSpecificCluster.java └── test/java/ └── MemoryDBTest.java所有示例统一使用默认凭据提供者default credentials provider获取 AWS 身份认证即通过 SDK 默认的凭据链解析环境变量、配置文件或 IAM 角色中的访问凭据。环境准备与运行前提项目构建配置pom.xml示例项目使用 Maven 构建关键配置位于 pom.xmlJava 版本java.version为 21maven.compiler.source/target均设为 21AWS SDK 版本管理通过software.amazon.awssdk:bom版本2.35.10统一管理 SDK 依赖版本核心依赖为software.amazon.awssdk:memorydb测试与工具依赖JUnit Jupiter5.11.4、Secrets Manager 客户端测试时从 AWS Secrets Manager 读取配置、Gson解析密钥 JSON、JedisRedis 客户端、SLF4J Log4j2 日志实现测试插件Maven Surefire Plugin3.5.2负责执行 JUnit 测试。凭据与费用注意事项运行这些示例会在你指定的 AWS 账户和区域中执行真实操作可能产生费用。官方 README 明确提示以下几点示例会针对你配置凭据的账户与区域执行 AWS 操作运行即可能产生账户费用运行测试同样可能产生 AWS 账户费用建议为代码授予最小权限least privilege仅授予完成任务所需的最低权限代码并非在所有 AWS 区域都经过测试使用前请确认目标区域已支持 MemoryDB。由于部分示例执行的是破坏性操作如删除集群README 特别警告运行删除或修改 AWS 资源的操作时要格外小心建议在实验时创建独立的、仅用于测试的资源。单操作示例集群的创建、查询与删除以下示例全部使用MemoryDbClient对象客户端构建模式高度一致指定区域默认Region.US_EAST_1后通过 Builder 创建。MemoryDbClient memoryDbClient MemoryDbClient.builder() .region(region) .build();创建集群CreateClusterCreateCluster.java 演示如何创建一个 MemoryDB 集群。命令行用法为clusterName nodeType subnetGroupName aclName四个参数的含义参数含义clusterName集群名称nodeType集群节点的计算与内存容量规格如db.r6g.large等 MemoryDB 节点类型subnetGroupName集群使用的子网组名称aclName与集群关联的访问控制列表ACL名称核心创建请求构建如下CreateClusterRequest request CreateClusterRequest.builder() .clusterName(clusterName) .aclName(aclName) .description(Created using the AWS SDK for Java) .numShards(1) .nodeType(nodeType) .port(6379) .subnetGroupName(subnetGroupName) .build(); CreateClusterResponse response memoryDbClient.createCluster(request); System.out.println(Cluster created. The ARN is response.cluster().arn());从源码可以看到几个值得注意的默认配置numShards(1)默认创建单分片集群分片是 MemoryDB 水平扩展的基本单元port(6379)使用 Redis 默认端口 6379description为集群附加描述信息响应对象通过response.cluster().arn()返回新集群的 ARN便于后续跟踪资源。异常处理统一捕获MemoryDbException通过e.awsErrorDetails().errorMessage()输出 AWS 返回的具体错误信息。查询所有集群DescribeClustersDescribeClusters.java 不需要命令行参数直接列出账户下所有 MemoryDB 集群DescribeClustersRequest request DescribeClustersRequest.builder().build(); DescribeClustersResponse response memoryDbClient.describeClusters(request); ListCluster clusters response.clusters(); for (Cluster cluster : clusters) { System.out.println(The cluster name is: cluster.name()); System.out.println(The cluster ARN is: cluster.arn()); System.out.println(Endpoint is: cluster.clusterEndpoint()); }每个Cluster对象都暴露了名称、ARN 以及clusterEndpoint()应用连接 MemoryDB 的终端节点地址为后续通过 Jedis 等客户端连接集群提供了基础信息。查询指定集群并等待就绪DescribeSpecificClusterDescribeSpecificCluster.java 实现了轮询等待集群可用的实用模式命令行参数为clusterName。其核心逻辑是一个循环检测函数checkIfAvailablewhile (!clusterAvailable) { myCluster getCluster(memoryDbClient, clusterName); status myCluster.status(); if ((status.compareTo(creating) 0) || (status.compareTo(snapshotting) 0)) { Thread.sleep(2000); System.out.println(The status is status); } else { clusterAvailable true; } } System.out.println(The myCluster.name() state is myCluster.status());这段代码值得细读当集群状态为creating创建中或snapshotting快照进行中时每隔 2 秒轮询一次Thread.sleep(2000)一旦状态进入其他就绪状态循环结束并输出最终状态底层的getCluster私有方法通过DescribeClustersRequest.builder().clusterName(clusterName)精确过滤目标集群从返回列表中取出唯一的Cluster对象该方法同时抛出并处理MemoryDbException与InterruptedException说明轮询期间线程中断也被纳入异常管理。这种创建后轮询等待就绪的模式是云资源异步创建场景下的标准做法在本示例的测试流程中起着关键衔接作用。删除集群DeleteClusterDeleteCluster.java 是最简单的破坏性操作示例命令行参数仅为clusterNameDeleteClusterRequest clusterRequest DeleteClusterRequest.builder() .clusterName(clusterName) .build(); memoryDbClient.deleteCluster(clusterRequest); System.out.println(clusterName was successfully deleted);删除成功后控制台会打印确认信息。需要再次强调该操作不可逆README 建议在测试专用资源上执行。快照操作创建与描述创建快照CreateSnapshotCreateSnapshot.java 为指定集群创建快照命令行用法为clusterName snapShotNameclusterName要快照的集群名称snapShotName新建快照的名称。CreateSnapshotRequest request CreateSnapshotRequest.builder() .clusterName(clusterName) .snapshotName(snapShotName) .build(); CreateSnapshotResponse response memoryDbClient.createSnapshot(request); System.out.println(The ARN of the response is response.snapshot().arn());创建成功后通过response.snapshot().arn()可获取快照的 ARN用于后续恢复、导出等操作。描述快照DescribeSnapshotsDescribeSnapshots.java 列出指定集群下的快照命令行参数为clusterNameDescribeSnapshotsRequest request DescribeSnapshotsRequest.builder() .maxResults(10) .clusterName(clusterName) .build(); DescribeSnapshotsResponse response memoryDbClient.describeSnapshots(request); ListSnapshot snapshots response.snapshots(); for (Snapshot snapshot : snapshots) { System.out.println(The snapshot name is snapshot.name()); System.out.println(The snapshot ARN is snapshot.arn()); }这里设置了maxResults(10)限制单次返回最多 10 条快照记录并遍历输出每个快照的名称与 ARN。注意原 README 的示例列表中存在若干指向错误文件的历史链接例如将描述集群描述快照误链到DeleteCluster.java实际对应的实现文件以本目录源码为准即 DescribeClusters.java、DescribeSnapshots.java 与 DescribeSpecificCluster.java。JUnit 5 集成测试MemoryDBTest 全解析测试框架与运行方式测试文件位于 MemoryDBTest.java基于JUnit 5编写可运行在 IntelliJ 等 IDE 中也可通过 Maven Surefire 插件从命令行执行mvn test测试类使用TestInstance(TestInstance.Lifecycle.PER_METHOD)每个测试方法独立实例与TestMethodOrder(MethodOrderer.OrderAnnotation.class)按Order注解顺序执行每个测试方法带Tag(IntegrationTest)标记共 6 个按序执行的测试顺序测试方法调用的业务方法验证内容Test 1createClusterCreateCluster.createSingleCluster创建集群Test 2describeSpecificClusterDescribeSpecificCluster.checkIfAvailable轮询等待集群就绪Test 3createSnapshotCreateSnapshot.createSpecificSnapshot创建快照Test 4describeSnapshotDescribeSnapshots.describeALlSnapshots描述快照Test 5describeAllClustersDescribeClusters.getClusterscheckIfAvailable列出集群并再次确认可用Test 6deleteClusterDeleteCluster.deleteSpecificCluster删除集群每个测试通过assertDoesNotThrow断言业务方法执行不抛异常成功后通过 SLF4J 日志输出Test N passed。测试之间形成完整的生命周期闭环创建 → 等待就绪 → 快照 → 删除这正是前文DescribeSpecificCluster轮询模式的用武之地——Test 2 必须先确认集群可用Test 3 才能对其创建快照。WARNING这些 JUnit 测试会操作真实的 AWS 资源并可能产生账户费用测试前后请注意清理。测试参数来源config.properties 与 AWS Secrets ManagerREADME 说明测试运行前必须在resources目录下的config.properties文件中定义以下值缺少任一值测试就会失败clusterName— 集群名称nodeType— 集群节点的计算与内存容量subnetGroupName— 集群使用的子网组名称aclName— 与集群关联的访问控制列表名称snapShotName— 快照名称。而从 MemoryDBTest.java 的实际实现看测试参数读取方式更进一步setUp()方法通过 Secrets Manager 客户端从名为test/memorydb的 AWS Secrets Manager 密钥中读取 JSON 配置private static String getSecretValues() { SecretsManagerClient secretClient SecretsManagerClient.builder() .region(Region.US_EAST_1) .build(); String secretName test/memorydb; GetSecretValueRequest valueRequest GetSecretValueRequest.builder() .secretId(secretName) .build(); GetSecretValueResponse valueResponse secretClient.getSecretValue(valueRequest); return valueResponse.secretString(); }拿到 JSON 字符串后用 Gson 反序列化为内部嵌套类SecretValues从而获取clusterName、nodeType、subnetGroupName、aclName、snapShotName五个字段。也就是说config.properties 与 Secrets Manager 两种配置方式均可支撑测试运行具体采用哪种取决于测试类的读取路径。测试资源的随机化处理为避免测试资源命名冲突setUp()中为clusterName和snapShotName追加了随机数后缀Random random new Random(); int randomNum random.nextInt((10000 - 1) 1) 1; clusterName values.getClusterName() randomNum; nodeType values.getNodeType(); subnetGroupName values.getSubnetGroupName(); aclName values.getAclName(); snapShotName values.getSnapShotName() randomNum;randomNum取值区间为[1, 10000]保证了多次并行运行测试时集群名与快照名不会互相覆盖。六步走从零运行 MemoryDB Java 示例综合 README 与源码完整的实操流程如下配置凭据确保默认凭据链可解析 AWS 访问凭据环境变量、~/.aws/credentials配置文件或 IAM 角色参考 SDK for Java 的凭据使用方式准备前置资源创建 MemoryDB 子网组与 ACL确定可用的节点类型nodeType构建项目在javav2/example_code/memorydb目录执行mvn clean package确认依赖AWS SDK BOM2.35.10、JUnit 5 等拉取成功配置测试参数在 config.properties或 AWS Secrets Manager 的test/memorydb密钥中填写clusterName、nodeType、subnetGroupName、aclName、snapShotName运行单操作示例例如创建集群java CreateCluster my-cluster db.r6g.large my-subnet-group my-acl其余示例依各自命令行参数执行创建快照需要clusterName与snapShotName两个参数描述/删除集群与描述快照需要一个clusterName参数运行集成测试在 IDE 中执行MemoryDBTest或命令行执行mvn test观察控制台逐条输出Test N passed验证从创建、轮询就绪、快照到删除的完整闭环。小结本文以官方 README 为骨架结合仓库内 6 个示例源码与 JUnit 测试完整梳理了 AWS SDK for Java v2 操作 Amazon MemoryDB for Redis 的核心链路MemoryDbClient的构建方式、创建/查询/删除集群与快照的 API 用法与参数含义、轮询等待集群就绪的实用模式以及集成测试的参数配置config.properties 与 Secrets Manager 双通道与执行机制。示例与测试代码均可在 javav2/example_code/memorydb 目录下找到并直接运行是理解 MemoryDB Java 开发与测试的最佳参考起点。本指南内容基于 AWS Code Examples 仓库Apache-2.0 许可中的官方示例与源码整理。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐如何快速集成第三方SDKAWS SDK for Java v2实战指南如何快速集成第三方SDKAWS SDK for Java v2实战指南 AWS SDK for Java v2是亚马逊官方推出的Java开发工具包专为与AW后端AWS SDK for Java v2 从源码构建与测试完整指南开发环境、Maven 构建与集成测试实战AWS SDK for Java v2 从源码构建与测试完整指南开发环境、Maven 构建与集成测试实战 本篇指南以官方仓库 aws sdk java v2后端Apache Druid 集成测试调试实战Docker 测试镜像、测试集群与 JUnit 用例的完整排障指南Apache Druid 集成测试调试实战Docker 测试镜像、测试集群与 JUnit 用例的完整排障指南 本文以 Apache Druid 仓库中 int数据库OLAP大数据后端上一篇RePKGWallpaper Engine资源全能处理工具让开发者轻松驾驭PKG与TEX文件下一篇Windows CleanerWindows系统清理优化工具完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

CiLocks ADB连接问题排查:unauthorized、no devices等8个常见报错速查 2026/9/25 4:09:25

CiLocks ADB连接问题排查:unauthorized、no devices等8个常见报错速查

CiLocks ADB连接问题排查:unauthorized、no devices等8个常见报错速查 【免费下载链接】CiLocks Crack Interface lockscreen, Metasploit and More Android/IOS Hacking 项目地址: https://gitcode.com/GitHub_Trending/ci/CiLocks CiLocks 是一款免费的 An…

阅读更多 →
AI客服系统响应时长从50分钟到2分半:Token管理、幻觉治理与多模态处理实战 2026/9/25 4:09:19

AI客服系统响应时长从50分钟到2分半:Token管理、幻觉治理与多模态处理实战

1. 项目背景与核心目标拆解1.1 为什么响应时长是客服系统的生死线50分钟到2分半,这个数字对比放在任何一家做客服业务的公司里,都足够让技术负责人心跳加速。我所在的项目组从零搭建了一套AI客服系统,上线前三个月,平均首次响应时…

阅读更多 →
ng-zorro-antd Code Editor 组件全指南:在 Angular 中集成 monaco-editor 的加载模式、配置与实战 2026/9/25 4:09:19

ng-zorro-antd Code Editor 组件全指南:在 Angular 中集成 monaco-editor 的加载模式、配置与实战

UI组件前端 【免费下载链接】ng-zorro-antd Angular UI Component Library based on Ant Design 项目地址: https://gitcode.com/gh_mirrors/ng/ng-zorro-antd 点击查看 免费下载 导读 nz-code-editor 是 ng-zorro-antd 基于微软 monaco-editor 封装的开箱即用型 …

阅读更多 →
Hypothesis 策略适配指南:用 map、filter 与 assume 精确控制测试数据生成 2026/9/25 4:09:19

Hypothesis 策略适配指南:用 map、filter 与 assume 精确控制测试数据生成

测试开发工具 【免费下载链接】hypothesis The property-based testing library for Python 项目地址: https://gitcode.com/gh_mirrors/hy/hypothesis 点击查看 免费下载 本篇指南聚焦 Hypothesis(Python 属性基测试库)中"适配策略&qu…

阅读更多 →
金融AI审计落地:风险矩阵、证据链与FDE实操指南 2026/9/25 4:09:13

金融AI审计落地:风险矩阵、证据链与FDE实操指南

1. 金融AI落地的审计困境与破局思路金融行业对AI的态度一直很拧巴。业务部门想要更快的审批速度、更准的风险定价、更低的运营成本,技术团队手里也有大模型和机器学习工具,但每次项目推进到合规审查环节,就会被一连串问题卡住:这个…

阅读更多 →
HR效率革命:WorkBuddy加Skill实战,从简历筛选到薪酬核算全自动化 2026/9/25 4:09:13

HR效率革命:WorkBuddy加Skill实战,从简历筛选到薪酬核算全自动化

1. 从HR的日常痛点说起:为什么WorkBuddy加Skill能让人“爽爆”HR这个岗位,外行看着光鲜,内行才知道有多琐碎。招聘季一天筛几百份简历,眼睛都快看瞎;员工入职要收集身份证、学历证、银行卡、体检报告,少一样…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉