通过openAPI实现自定义周期备份
游戏业务经常选用GeminiDB Redis存储玩家数据,兼顾低时延和数据持久化特性。本文介绍通过openAPI编写手动备份脚本,实现自定义备份周期(例如每2小时或4小时备份一次)。
GeminiDB Redis备份时仅需在存储层打秒级快照并上传OBS保存,因此速度极快,且对业务影响小(优于自建开源Redis的全量dump方案)。
注意事项
- 触发备份时,可能会产生轻微的瞬时抖动。
- 备份上传时,需占用一定CPU和带宽资源。
- 手动备份默认永久保存,控制台支持批量删除不需要的备份。
操作步骤
- pom文件导入样例,详情请参考SDK官方文档:
<dependency> <groupId>com.huaweicloud.sdk</groupId> <artifactId>huaweicloud-sdk-gaussdbfornosql</artifactId> <version>3.1.92</version> </dependency>
认证信息配置auth:// 配置认证信息 // 可通过环境变量等方式配置认证信息。 ICredential auth = new BasicCredentials() .withAk(System.getenv("HUAWEICLOUD_SDK_AK")) .withSk(System.getenv("HUAWEICLOUD_SDK_SK"));
withAk、withSk是使用账号下的AK、SK,获取方式可以参考获取AK/SK。
- 获取GeminiDB服务客户端:
// 创建服务客户端 VpcClient client = VpcClient.newBuilder() .withCredential(auth) .withRegion(VpcRegion.valueOf("cn-north-4")) .build();
此示例是以Vpc服务为参考,需要将VpcClient 修改为:GaussDBforNoSQLClient。
- withCredential:认证信息,传入第1步中构造的信息auth即可。
- withRegion:将VpcRegion替换成GaussDBforNoSQLRegion即可,Region信息可以在APIE上查看获取。
- 构造请求:
// 创建请求 ListVpcsRequest request = new ListVpcsRequest();
将ListVpcsRequest修改为CreateBackRequest,其中CreateBackRequest需要设置如下两个值,具体方法请参考创建手动备份:
- request.setInstanceId("instanceId"); // 需要创建备份的实例ID。
- request.setBody(backupRequestBody); // 备份信息:备份名称和备份描述。
- 调用API:
ListVpcsResponse response = client.listVpcs(request); System.out.println(response.toString());
使用2获取的服务客户端调用创建备份接口:
CreateBackResponse backResponse = client.createBack(request);
- 加入定时触发逻辑(也可以自己选择其他类似方式实现)。
需用户编写一个定时任务方法,将1至4的代码放入该方法中。在方法上使用@Scheduled(cron = "0 0/1 * * * ?")进行配置调度时间策略,如下为具体参考配置示例:
Cron表达式:[秒] [分] [小时] [日] [月] [周] [年]。
- *表示所有值。在分钟里表示每一分钟触发,在小时、日期、月份等里面表示每一小时、每一日、每一月。
- ?表示不指定值。表示不关心当前位置设置的值,比如不关心是周几,则周的位置填写?。
- -表示区间。小时设置为10-12,表示10点、11点、12点均会触发。
- ,表示多个值。 小时设置成10,12,表示10点和12点会触发。
- /表示递增触发。 5/15表示从第5秒开始,每隔15秒触发。
- L表示最后,只能出现在日和周两个域。L前加数据,表示在该数据的最后一个触发,如6L表示在最后一个星期五触发。
- W表示离指定日期最近的工作日触发。15W表示离该月15号最近的工作日触发。
- #表示每月的第几个周几。6#3表示该月的第三个周五触发。
配置方式举例:
- "0 15 10 ? * *"表示每天上午10:15触发。
- "0 15 10 * * ? 2024"表示2024年的每天上午10:15触发。
- "0 0/5 14 * * ?"表示在每天下午2点到下午2:55期间的每5分钟触发。
- "0 0/5 14,18 * * ?"表示在每天下午2点到下午2:55期间和下午6点到下午6:55期间的每5分钟触发。
- "0 0 */6 * * *"表示每6个小时触发。