本文介绍通过DTS的数据订阅功能,结合MongoDB或Redis实现高可靠、低延迟的缓存更新策略。
前提条件
已完成数据订阅通道(旧版)的配置,详情请参见创建 DRDS 数据订阅通道。背景信息
为提高业务访问速度,提升业务读并发,在业务架构中引入了缓存层。业务的读请求路由到缓存层,通过缓存的内存读取机制提升业务读取性能;同时,为保证数据的完整性,业务的更新数据持久化存储至RDS MySQL中。此时,业务需要实现缓存更新策略,保证业务数据更新后,缓存中的数据能够被同步更新。准备工作
创建AccessKey并获取AccessKey ID和AccessKey Secret信息,详情请参见创建AccessKey。
重要 如果使用子账号(RAM用户)来订阅数据,该账号需具备AliyunDTSFullAccess权限,授权方法请参见通过系统策略授权子账号管理DTS。
操作步骤
本文以IntelliJ IDEA软件(Community Edition 2018.1.4 Windows版本)为例,介绍如何运行SDK示例代码来消费订阅数据。
- 下载数据订阅SDK。
- 将下载的SDK包添加到项目依赖中。
- 根据业务需求选择下述步骤,运行MongoDB或Redis的缓存示例代码。
- 运行MongoDB缓存示例代码
- 双击打开左侧的pom.xml文件,将下述配置添加至该文件中。
<dependencies> <dependency> <groupId>com.vividsolutions</groupId> <artifactId>jts</artifactId> <version>1.13</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.2.0</version> </dependency> </dependencies>
- 保存并等待相关依赖包加载完成。 说明 建议开启IntelliJ IDEA软件的Maven依赖自动更新功能。
- 在项目中新建一个名称为DTSMySQL2Mongo的Java Class文件。
- 下载MongoDB缓存示例代码。说明
建议复制下载链接地址,在Google浏览器的空白标签页粘贴链接进行下载。
- 将下载后的示例代码中的内容复制并替换至项目中新建的DTSMySQL2Mongo文件中。
- 修改项目中DTSMySQL2Mongo文件中代码,设置代码中各参数对应的值。
参数 说明 accessKey 分别填写阿里云账号的AccessKey ID和AccessKey Secret信息,详情请参见准备工作。 accessSecret Subscription_Instance_ID 填写数据订阅实例ID。您可以登录数据传输控制台,单击左侧导航栏的数据订阅,然后找到目标数据订阅实例ID。 mongUrl 填写MongoDB数据库的连接地址及鉴权数据库名,格式为 <连接地址>:<服务端口>/<鉴权数据库名>
,例如ds-bp********-pub.mongodb.rds.aliyuncs.com:3717/admin
。mongUserName 填写MongoDB数据库的数据库账号。 说明 该数据库账号需具备目标数据库的读写权限。例如订阅的表所属的库名为testdata,程序获取到增量变更后会将数据写入至MongoDB数据库的testdata库中,因此该数据库账号需具备testdata库的读写权限。mongUserPassword 填写该数据库账号对应的密码。 - 在IntelliJ IDEA软件界面的顶部,单击 运行该程序。
- 双击打开左侧的pom.xml文件,将下述配置添加至该文件中。
- 运行Redis缓存示例代码
- 双击打开左侧的pom.xml文件,将下述配置添加至该文件中。
<dependencies> <dependency> <groupId>com.vividsolutions</groupId> <artifactId>jts</artifactId> <version>1.13</version> </dependency> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.7.2</version> </dependency> </dependencies>
- 保存并等待相关依赖包加载完成。 说明 建议开启IntelliJ IDEA软件的Maven依赖自动更新功能。
- 在项目中新建一个名称为DTSMySQL2Redis的Java Class文件。
- 下载Redis缓存示例代码。说明
建议复制下载链接地址,在Google浏览器的空白标签页粘贴链接进行下载。
- 将下载后的示例代码中的内容复制并替换至项目中新建的DTSMySQL2Redis文件中。
- 修改项目中DTSMySQL2Redis文件中代码,设置代码中各参数对应的值。
参数 说明 accessKey 分别填写阿里云账号的AccessKey ID和AccessKey Secret信息,详情请参见准备工作。 accessSecret Subscription_Instance_ID 填写数据订阅实例ID。您可以登录数据传输控制台,单击左侧导航栏的数据订阅,然后找到目标数据订阅实例ID。 redisPassword 填写Redis数据库的数据库密码。 说明 如果Redis数据库设置了密码,您还需要将代码中的73行由pool = new JedisPool(config, redisUrl, redisPort, 3000);
修改为pool = new JedisPool(config, redisUrl, redisPort, 3000,redisPassword)
。redisPort 填写Redis数据库的服务端口,默认为6379。 redisUrl 填写Redis数据库的连接地址(域名或IP地址)。 - 在IntelliJ IDEA软件界面的顶部,单击 运行该程序。
- 双击打开左侧的pom.xml文件,将下述配置添加至该文件中。
- 运行MongoDB缓存示例代码
- 等待程序运行,程序会获取源库的增量数据并将其写入至MongoDB或Redis数据库中。
执行结果
- 登录订阅的源数据库,在订阅的源表中插入几条数据,可以查看到该程序订阅到了对应的增量数据变更,然后将对应的数据写入到目标数据库。
- MongoDB缓存示例代码
- Redis缓存示例代码
- MongoDB缓存示例代码
- 登录目标数据库,查询对应的数据,可查看到对应的数据已正常写入。
- MongoDB数据库
- Redis数据库
- MongoDB数据库