首页 > 其他分享 >分布式锁解决集群下的方法抢占执行

分布式锁解决集群下的方法抢占执行

时间:2023-07-05 11:00:13浏览次数:42  
标签:return name String token 集群 result 抢占 分布式

问题描述:

  启动两台heima-leadnews-schedule服务,每台服务都会去执行refresh定时任务方法

 

分布式锁:控制分布式系统有序的去对共享资源进行操作,通过互斥来保证数据的一致性。

分布式锁的解决方案:

              

 

sexnx (SET if Not eXists) 命令在指定的 key 不存在时,为 key 设置指定的值。

 请求锁:通过setnx设置锁,能设置成功说明没有别人占用锁,倘若失败,则已经有用户占用锁了。

    成功获得锁后,操作完成后释放锁【删除】以便其他用户能获得锁。

/**
 * 加锁
 *
 * @param name
 * @param expire
 * @return
 */
public String tryLock(String name, long expire) {
    name = name + "_lock";
    String token = UUID.randomUUID().toString();
    RedisConnectionFactory factory = stringRedisTemplate.getConnectionFactory();
    RedisConnection conn = factory.getConnection();
    try {

        //参考redis命令:
        //set key value [EX seconds] [PX milliseconds] [NX|XX]
        Boolean result = conn.set(
                name.getBytes(),
                token.getBytes(),
                Expiration.from(expire, TimeUnit.MILLISECONDS),
                RedisStringCommands.SetOption.SET_IF_ABSENT //NX
        );
        if (result != null && result)
            return token;
    } finally {
        RedisConnectionUtils.releaseConnection(conn, factory,false);
    }
    return null;
}

 

1、在分布式系统环境下,一个方法在同一时间内只能被一个机器的一个线程执行

2、主要是通过redis的setnx特性完成分布式锁的性能

  A获取到锁以后其它客户端不能操作,只能等待A释放锁以后,其它客户才能操作

标签:return,name,String,token,集群,result,抢占,分布式
From: https://www.cnblogs.com/fxzm/p/17527956.html

相关文章

  • 数据仓库MPP架构&分布式架构
    数据仓库MPP架构&分布式架构一、MPP架构1.1MPP架构概述MPP(MassivelyParallelProcessing)架构是一种分布式数据处理技术,能够通过将工作负载分散到多个节点上来提高数据处理性能。与传统的共享架构不同,MPP采用非共享架构(ShareNothing),将单机数据库节点组成集群,每个节点拥有独立......
  • 分布式锁
    1mysql唯一键2redislua脚本保证原子性setnxexpire 看门狗保证执行的时间大于锁的时间为了避免其他人误删除值和对应的用户一一对应保证唯一比如值为uid 3redisson 4redis多台奇数master超过一般就获取锁成功 5zk 参考 https://www.cnblogs.com/liuq......
  • 6.29 celery分布式异步任务框架
    1.celery:分步式异步任务框架 /1 异步任务/2 延迟任务/3 定时任务/4 celery架构消息中间件(broker):消息队列:可以使用redis,rabbitmq任务执行单元(worker):执行单元执行提交的任务任务执行结果存储(banckend):可以使用mysql,redis/5安装celery模块:cmd中......
  • 分布式数据库 Join 查询设计与实现浅析
    相对于单例数据库的查询操作,分布式数据查询会有很多技术难题。本文记录Mysql分库分表 和ElasticsearchJoin查询的实现思路,了解分布式场景数据处理的设计方案。文章从常用的关系型数据库MySQL的分库分表Join分析,再到非关系型ElasticSearch来分析Join实现策略。逐步......
  • Redis集群、部署Redis集群
    Redis集群集群概述所谓集群,就是通过添加服务器的数量,提供相同的服务,从而让服务器达到一个稳定、高效的状态单个redis存在不稳定性。当redis服务宕机了,就没有可用的服务了单个redis的读写能力是有限的Redis集群是为了强化redis的读写能力redis集群中,每一个redis称之为一个......
  • 基于Redis分布式缓存
    1.安装包使用Redis分布式缓存需要安装Redis的支持包,可以通过nuget命令安装,如下:install-packageMicrosoft.Extensions.Caching.StackExchangeRedis 2.在Program.cs文件中注册builder.Services.AddStackExchangeRedisCache(option=>{option.Configuration......
  • 分布式事务的几种实现方式
    基础理论CAP理论一致性(Consistency):在分布式系统中所有的数据备份,在同一时刻都保持一致状态,如无法保证状态一致,直接返回错误;可用性(Availability):在集群中一部分节点故障,也能保证客户端访问系统并得到正确响应,允许一定时间内数据状态不一致;分区容错性(Partitiontolerance):分布式......
  • 应用技术架构 —— 分布式应用多运行时架构
    应用技术架构——分布式应用多运行时架构发布于 2022-03-1609:25:141K0举报本文作者:何文强—CODING高级解决方案架构师具有一线互联网、物联网独角兽、全国股份制银行、新型智慧交通等跨行业从业经历,历任Java开发高级工程师、DevOps技术专家......
  • 分布式医疗云平台(项目功能简介截图)【
    目录3、看病就诊 3.1、门诊挂号3.2、挂号列表 3.4.我的排班 3.5.医生排班  3.6.患者库 4.收费管理4.1.处方收费  4.2.收费查询 4.3.处方退费4.4.退费查询  4.5.处方发药3、看病就诊 3.1、门诊挂号3.1.1、已存在的患者挂号3.1.2、不存在的患者挂号 直接输入患者信息 ......
  • 分布式医疗云平台(项目功能简介截图)【手机端
    目录7.手机端7.1.首页7.2.医院信息  7.3.人个中心7.手机端7.1.首页7.1.1.绑定完善个人信息 7.1.2.预约挂号 7.1.3.挂号记录 7.1.4.就诊病例7.1.5.病历详情 7.1.6.检查结果 7.1.7.检查结果详情 7.2.医院信息  7.3.人个中心7.3.1.我的档案信息 7.3.2.完善档案......