首页/新闻资讯/正文详情

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

发布时间:2026/9/25 2:56:45 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

OpenClaw技能实战:用Skill封装MySQL增删改查的完整方法
OpenClaw技能实战:用Skill封装MySQL增删改查的完整方法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:56:45

Delphi开发必备:EmbeddedWB浏览器控件从安装到深度定制
Delphi开发必备:EmbeddedWB浏览器控件从安装到深度定制

简介:面向Delphi开发者,特别是基于Delphi 12.3环境需要集成网页浏览能力的项目团队,这份EmbeddedWB控件完整源代码包提供了从底层封装到上层调用的参考实现。压缩包共226个文件,包含65个pas源文件、126个dcu编译单元和22个dpk包工… · 2026/9/25 2:56:45

DLMS/COSEM与HDLC协议解析:从报文抓包到联调避坑指南
DLMS/COSEM与HDLC协议解析:从报文抓包到联调避坑指南

简介:面向电表通信与自动抄表领域的DLMS/COSEM协议资料包,内含中英文标准文档和HDLC协议实现源码,可支撑数据采集、设备互操作及系统集成场景。压缩包共195个文件,以60个h头文件与39个c源码文件为主,另有12份doc、11份… · 2026/9/25 2:56:39

云原生健康监测系统落地实战:设备接入、实时告警与临床可用性
云原生健康监测系统落地实战:设备接入、实时告警与临床可用性

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:30:30

开关机芯片选型五大硬指标深度解析:从参数到系统可靠性
开关机芯片选型五大硬指标深度解析:从参数到系统可靠性

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:30:24

C++实现FCFS与SJF进程调度算法:课程设计实战与避坑指南
C++实现FCFS与SJF进程调度算法:课程设计实战与避坑指南

简介:这份资源面向计算机相关专业学生与操作系统课程学习者,提供C实现的进程调度模拟程序,重点解决先来先服务FCFS与短作业优先SJF两种算法的对比实验需求。程序支持输入n个进程的到达时间与服务时间,分别按两种算法调度&#xff… · 2026/9/25 3:30:24

用Python批量读写PDF书签:PyMuPDF实现目录跳转与避坑指南
用Python批量读写PDF书签:PyMuPDF实现目录跳转与避坑指南

简介:面向需要批量管理PDF书签的Python开发者,这套源码演示了基于PyPDF2完成PDF书签读取与批量写入的完整流程。资源共包含2个文件,核心是一个可直接修改运行的Python脚本(.py),另附一个依赖库压缩包&#… · 2026/9/25 3:30:24

HC32F460 200MHz外部晶振时钟切换实战指南
HC32F460 200MHz外部晶振时钟切换实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 3:30:18

Nuke FetchImage 指南:在 SwiftUI 中构建可观察的图像加载 ViewModel
Nuke FetchImage 指南:在 SwiftUI 中构建可观察的图像加载 ViewModel

移动开发图像处理 【免费下载链接】Nuke Image loading system 项目地址: https://gitcode.com/gh_mirrors/nu/Nuke 点击查看 免费下载 本文以 Nuke 官方文档中 NukeUI/FetchImage 的扩展说明为主体,结合仓库源码与测试用例,系统讲解如何使用… · 2026/9/25 3:30:18

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31

MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码