多活高可用服务 MAS
多活高可用服务 MAS
- 最新动态
- 功能总览
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 开始使用多活高可用服务
- 功能模块
- 命名空间
- 多活管理
- 应用管理
- 监控管理
-
工作流管理
- 工作流简介
- 工作流模板
- 创建工作流
- 编排工作流
- 导入工作流
-
工作流插件说明
- DRS灾备切换
- DRS检查RTO&RPO
- RDS实例读写设置
- RDS实例重启
- RDS实例创建备份
- DWS检查容灾任务
- DWS容灾操作
- DCS开启/关闭白名单
- OBS桶存量比较
- OBS跨区域复制任务设置
- OBS桶策略操作授权用户
- DNS添加记录集
- DNS删除记录集
- DNS公网域名记录集权重设置
- Smart Connect任务操作
- 人工卡点
- 等待
- AOM作业执行
- 混沌实验执行
- PerfTest测试任务启动/停止
- HTTP请求
- MAS多活管理切换/回切
- DDM实例创建备份
- DDM实例读写设置
- RDS实例指定用户读写设置
- RDS检查容灾复制状态
- RDS灾备实例升主
- RDS修改实例参数
- DRS任务操作
- DRS检查任务方向和状态
- RDS自动备份策略设置
- RDS检查实例备份信息
- DRS检查任务信息
- DRS数据级/对象级对比
- OpenGauss容灾操作
- OpenGauss检查容灾信息
- 执行工作流
- 查看工作流执行详情
- 编辑工作流
- 复制工作流
- 删除工作流
- 关注工作流
- 混沌工程
- 应用韧性Hub
- 凭证管理
- 事件监控
- 查看审计日志
- 权限管理
- 最佳实践
- 开发指南
- 常见问题
- 视频帮助
- 文档下载
- 通用参考
本文导读
展开导读
链接复制成功!
Redisson Lock
Redisson是一个基于Redis的Java库,它提供了一系列的分布式对象和服务,其中包括分布式锁。
Redisson的分布式锁实现了可靠的分布式锁机制,可以在分布式环境下实现对共享资源的并发访问控制。
对接Redisson Lock命令参考如下。
import com.huawei.devspore.mas.redis.config.Constants; import com.huawei.devspore.mas.redis.config.MasRedisConfiguration; import com.huawei.devspore.mas.redis.config.RedisServerConfiguration; import com.huawei.devspore.mas.redis.config.RedisType; import com.huawei.devspore.mas.redis.core.MultiZoneClient; import com.huawei.devspore.mas.redis.exception.DcsException; import lombok.extern.slf4j.Slf4j; import org.Redisson.Redisson; import org.Redisson.api.RLock; import org.Redisson.api.RedissonClient; import org.Redisson.codec.JsonJacksonCodec; import org.Redisson.config.Config; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.stream.Collectors; @Slf4j @Service public class RedissonClientStorage { // dcs的客户端 private final MultiZoneClient client; // dc1和dc2的RedissonClient private final Map<String, RedissonClient> RedissonDcsMap = new HashMap<>(); /** * @param client MultiZoneClient用于获取active. * @param masRedisConfiguration 获取Redis配置 * @return */ public RedissonClientStorage(MultiZoneClient client, MasRedisConfiguration masRedisConfiguration) { this.client = client; if (masRedisConfiguration.getRedis().getServers().containsKey(Constants.DC_1)) { RedissonDcsMap.put(Constants.DC_1, create(masRedisConfiguration.getRedis().getServers().get(Constants.DC_1))); } if (masRedisConfiguration.getRedis().getServers().containsKey(Constants.DC_2)) { RedissonDcsMap.put(Constants.DC_2, create(masRedisConfiguration.getRedis().getServers().get(Constants.DC_2))); } } public static RedissonClient create(RedisServerConfiguration configuration) { if (RedisType.NORMAL.equals(configuration.getType()) || RedisType.MASTER_SLAVE.equals(configuration.getType())) { Config config = new Config(); config.useSingleServer() .setAddress(Constants.RedisSON_URI_PREFIX.concat(configuration.getHosts())) .setPassword(configuration.getPassword()) .setDatabase(configuration.getDb()); config.setCodec(new JsonJacksonCodec()); return Redisson.create(config); } else if (RedisType.CLUSTER.equals(configuration.getType())) { Config config = new Config(); config.useClusterServers() .setPassword(configuration.getPassword()) .setNodeAddresses(Arrays.stream(configuration.getHosts().split(",")) .map(Constants.RedisSON_URI_PREFIX::concat) .collect(Collectors.toList())); config.setCodec(new JsonJacksonCodec()); return Redisson.create(config); } else { throw new DcsException(String.format("unknown redis type %s", configuration.getType())); } } /** * @return active的RedissonClient */ public RedissonClient getActiveRedisson() { return RedissonDcsMap.get(client.getStrategyMode().getState().getActive()); } // Redisson lock使用的demo public void lock() throws InterruptedException { RedissonClient activeRedisson = this.getActiveRedisson(); RLock lock = activeRedisson.getLock("lock"); try { if (lock.tryLock()) { log.info("lock success-{}", Thread.currentThread()); Thread.sleep(30000); } else { log.info("lock fail-{}", Thread.currentThread()); } } finally { lock.unlock(); log.info("unlock success-{}", Thread.currentThread()); } } }
父主题: 客户各场景替换方案