zoukankan      html  css  js  c++  java
  • 论JAVA实现MYSQL 行级锁(分布式锁实现方案一)

     @Override
        @Transactional
        public String getCustomerId() {
    //        return String.valueOf(getSequenceId(SEQ_CUSTOMER_ITEM_CODE.seqName));
            String type=SEQ_CUSTOMER_ITEM_CODE.seqName;
    
            if (!sequenceValueMap.containsKey(type)) {
                SequenceDO sequenceDO = sequenceDOMapper.getBySeqNameForUpdate(type);
                LOGGER.info(Thread.currentThread().getName()+"===="+sequenceDO.getCurrentValue());
                sequenceValueMap.put(type, sequenceDO);
                //更新值
                int value = sequenceDO.getCurrentValue();
                sequenceDOMapper.updateSequenceValue(type, sequenceDO.getCurrentValue() + sequenceDO.getStep());
                sequenceDO.setCurrentValue(value + 1);
                LOGGER.info(Thread.currentThread().getName()+"----------->CurrentSequenceType:[{}],value:[{}]", type, sequenceDO.getCurrentValue());
    
                return sequenceDO.getCurrentValue()+"";
            } else {
                SequenceDO sequenceDO = sequenceValueMap.get(type);
                int value = sequenceDO.getCurrentValue() + 1;
                if (value % sequenceDO.getStep() == 0) {
                    //更新值
                    SequenceDO temp = sequenceDOMapper.getBySeqNameForUpdate(type);
                    LOGGER.info(Thread.currentThread().getName()+"----------->CurrentSequenceType:[{}],value:[{}]", type, temp.getCurrentValue());
                    sequenceDOMapper.updateSequenceValue(type, temp.getCurrentValue() + temp.getStep());
                    sequenceValueMap.put(type, temp);
                } else {
                    sequenceDO.setCurrentValue(value);
                }
                return value+"";
            }
        }
    

      使用行级锁 一定要注意 加上事务控制   MYSQL 行级锁才会起效,才会以排他的形式  访问

    -12-26 20:03:20.562  INFO  39993---[Thread-22]   c.s.m.s.i.SequenceServiceImpl - Thread-22====100198439
    2019-12-26 20:03:20.572  INFO  39993---[Thread-22]   c.s.m.s.i.SequenceServiceImpl - Thread-22----------->CurrentSequenceType:[sequenceCustomerInfo],value:[100198440]
    2019-12-26 20:03:20.577  INFO  39993---[ZkClient-EventThread-23-127.0.0.1:2181]   o.I.z.ZkEventThread - Terminate ZkClient event thread.
    2019-12-26 20:03:20.580  INFO  39993---[Thread-23]   c.s.m.s.i.SequenceServiceImpl - Thread-23====100198440
    2019-12-26 20:03:20.581  INFO  39993---[DubboShutdownHook]   o.a.z.ZooKeeper - Session: 0x100048539830052 closed
    2019-12-26 20:03:20.581  INFO  39993---[main-EventThread]   o.a.z.ClientCnxn - EventThread shut down
    100198440
    2019-12-26 20:03:20.589  INFO  39993---[Thread-23]   c.s.m.s.i.SequenceServiceImpl - Thread-23----------->CurrentSequenceType:[sequenceCustomerInfo],value:[100198441]
  • 相关阅读:
    国内高通量基因测序公司成立 时间表
    递推法(归纳法)
    1. 基础知识 (直方图 柱状图 正态分布 模型 抽样分布 )
    1. 基础概念 (统计分布 抽样 置信区间 标准差)
    史上最全 | 39个RNAseq分析工具与对比
    转录组分析工具大比拼 (完整翻译版)
    C#、.NET Framework、CLR的关系
    C#程序集及程序集概念介绍
    SSM处理 No 'Access-Control-Allow-Origin' header is present on the requested resource 问题
    mybatis字符#与字符$的区别
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/12104147.html
Copyright © 2011-2022 走看看