本文介绍通过DTS的数据订阅功能,结合MongoDB或Redis实现高可靠、低延迟的缓存更新策略。

前提条件

已完成数据订阅通道(旧版)的配置,详情请参见创建RDS MySQL数据订阅通道(旧版)创建DRDS数据订阅通道

背景信息

为提高业务访问速度,提升业务读并发,在业务架构中引入了缓存层。业务的读请求路由到缓存层,通过缓存的内存读取机制提升业务读取性能;同时,为保证数据的完整性,业务的更新数据持久化存储至RDS MySQL中。此时,业务需要实现缓存更新策略,保证业务数据更新后,缓存中的数据能够被同步更新。

准备工作

创建AccessKey并获取AccessKey ID和AccessKey Secret信息,详情请参见创建AccessKey

注意 如果使用子账号(RAM用户)来订阅数据,该账号需具备AliyunDTSFullAccess权限,授权方法请参见通过系统策略授权子账号管理DTS

操作步骤

本文以IntelliJ IDEA软件(Community Edition 2018.1.4 Windows版本)为例,介绍如何运行SDK示例代码来消费订阅数据。

  1. 下载SDK包(dts-subscribe-3.0.jar)
  2. dts-subscribe-3.0.jar添加到项目依赖中。
    1. 打开IntelliJ IDEA软件,单击File > New > Project,然后根据提示创建一个Maven项目。
    2. 单击File > Project Structure
    3. 单击左侧的Modules,然后在页面右侧单击加号 > 1 JARs or directories
    4. 根据提示选择下载的文件:dts-subscribe-3.0.jar,将其加入到项目依赖中。
      依赖添加结果
  3. 根据业务需求选择下述步骤,运行MongoDB或Redis的缓存示例代码。
    • 运行MongoDB缓存示例代码
      1. 双击打开左侧的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>
      2. 保存并等待相关依赖包加载完成。
        说明 建议开启IntelliJ IDEA软件的Maven依赖自动更新功能。
      3. 在项目中新建一个名称为DTSMySQL2Mongo的Java Class文件。
      4. 下载MongoDB缓存示例代码
      5. 将下载后的示例代码中的内容复制并替换至项目中新建的DTSMySQL2Mongo文件中。
      6. 修改项目中DTSMySQL2Mongo文件中代码,设置代码中各参数对应的值。配置MongoDB缓存示例代码
        参数 说明
        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 该数据库账号对应的密码。
      7. 在IntelliJ IDEA软件界面的顶部,单击Run > Run运行该程序。
    • 运行Redis缓存示例代码
      1. 双击打开左侧的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>
      2. 保存并等待相关依赖包加载完成。
        说明 建议开启IntelliJ IDEA软件的Maven依赖自动更新功能。
      3. 在项目中新建一个名称为DTSMySQL2Redis的Java Class文件。
      4. 下载Redis缓存示例代码
      5. 将下载后的示例代码中的内容复制并替换至项目中新建的DTSMySQL2Redis文件中。
      6. 修改项目中DTSMySQL2Redis文件中代码,设置代码中各参数对应的值。配置Redis缓存示例代码
        参数 说明
        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地址)。
      7. 在IntelliJ IDEA软件界面的顶部,单击Run > Run运行该程序。
  4. 等待程序运行,程序会将获取到的源库增量数据变更并将其写入至MongoDB或Redis数据库中。

执行结果

  1. 登录订阅的源数据库,在订阅的源表中插入几条数据,可以查看到该程序订阅到了对应的增量数据变更,然后将对应的数据写入到目标数据库。
    • MongoDB缓存示例代码MongoDB缓存代码运行结果
    • Redis缓存示例代码Redis缓存代码运行结果
  2. 登录目标数据库,查询对应的数据,可查看到对应的数据已正常写入。
    • MongoDB数据库MongoDB中对应的查询结果
    • Redis数据库Redis中对应的查询结果