Commit de77267c authored by liuxingyu's avatar liuxingyu

首次提交

parent 129ec0f1
......@@ -8,7 +8,7 @@
<version>2.7.8</version>
</parent>
<groupId>com.mushiny</groupId>
<artifactId>redisson</artifactId>
<artifactId>pubTools</artifactId>
<version>1.1.7-RELEASE</version>
<packaging>jar</packaging>
<properties>
......
......@@ -6,9 +6,9 @@
* 版权所有,侵权必究!
*/
package com.mushiny.redisson.annotation;
package com.mushiny.pubTools.annotation;
import com.mushiny.redisson.enums.LockType;
import com.mushiny.pubTools.enums.LockType;
import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;
......
package com.mushiny.redisson.aspect;
package com.mushiny.pubTools.aspect;
import com.mushiny.redisson.annotation.RedissonLock;
import com.mushiny.redisson.execption.RedissonErrorCode;
import com.mushiny.redisson.execption.RedissonException;
import com.mushiny.pubTools.annotation.RedissonLock;
import com.mushiny.pubTools.execption.RedissonErrorCode;
import com.mushiny.pubTools.execption.RedissonException;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
......@@ -35,7 +35,7 @@ public class RedissonLockAspect {
RedissonClient redissonClient;
@Pointcut("@annotation(com.mushiny.redisson.annotation.RedissonLock)")
@Pointcut("@annotation(com.mushiny.pubTools.annotation.RedissonLock)")
public void pointCut() {
}
......
package com.mushiny.redisson.config;
package com.mushiny.pubTools.config;
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
......
package com.mushiny.redisson.controller;
package com.mushiny.pubTools.controller;
import com.mushiny.redisson.enums.LockType;
import com.mushiny.redisson.utils.RedissonLockUtil;
import com.mushiny.pubTools.enums.LockType;
import com.mushiny.pubTools.utils.RedissonLockUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
......
......@@ -6,7 +6,7 @@
* 版权所有,侵权必究!
*/
package com.mushiny.redisson.enums;
package com.mushiny.pubTools.enums;
/**
* 行政区域 级别枚举
......
......@@ -6,7 +6,7 @@
* 版权所有,侵权必究!
*/
package com.mushiny.redisson.execption;
package com.mushiny.pubTools.execption;
/**
* 错误编码,由5位数字组成,前2位为模块编码,后3位为业务编码
......
......@@ -6,7 +6,7 @@
* 版权所有,侵权必究!
*/
package com.mushiny.redisson.execption;
package com.mushiny.pubTools.execption;
/**
......
package com.mushiny.redisson.utils;
package com.mushiny.pubTools.utils;
import com.mushiny.redisson.execption.RedissonErrorCode;
import com.mushiny.redisson.execption.RedissonException;
import com.mushiny.pubTools.execption.RedissonErrorCode;
import com.mushiny.pubTools.execption.RedissonException;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
......
package com.mushiny.pubTools.utils;
/**
* 描述信息
*
* @auther lxy
* @since 2023/8/9 13:57
*/
public class SnowFlakeUtil {
/**
* 起始时间戳,从2021-12-01开始生成
*/
private final static long START_STAMP = 1638288000000L;
/**
* 序列号占用的位数 12
*/
private final static long SEQUENCE_BIT = 12;
/**
* 机器标识占用的位数
*/
private final static long MACHINE_BIT = 10;
/**
* 机器数量最大值
*/
private final static long MAX_MACHINE_NUM = ~(-1L << MACHINE_BIT);
/**
* 序列号最大值
*/
private final static long MAX_SEQUENCE = ~(-1L << SEQUENCE_BIT);
/**
* 每一部分向左的位移
*/
private final static long MACHINE_LEFT = SEQUENCE_BIT;
private final static long TIMESTAMP_LEFT = SEQUENCE_BIT + MACHINE_BIT;
/**
* 机器标识
*/
private long machineId;
/**
* 序列号
*/
private long sequence = 0L;
/**
* 上一次时间戳
*/
private long lastStamp = -1L;
/**
* 构造方法
*
* @param machineId 机器ID
*/
public SnowFlakeUtil(long machineId) {
if (machineId > MAX_MACHINE_NUM || machineId < 0) {
throw new RuntimeException("机器超过最大数量");
}
this.machineId = machineId;
}
/**
* 产生下一个ID
*/
public synchronized long nextId() {
long currStamp = getNewStamp();
if (currStamp < lastStamp) {
throw new RuntimeException("时钟后移,拒绝生成ID!");
}
if (currStamp == lastStamp) {
// 相同毫秒内,序列号自增
sequence = (sequence + 1) & MAX_SEQUENCE;
// 同一毫秒的序列数已经达到最大
if (sequence == 0L) {
currStamp = getNextMill();
}
} else {
// 不同毫秒内,序列号置为0
sequence = 0L;
}
lastStamp = currStamp;
return (currStamp - START_STAMP) << TIMESTAMP_LEFT // 时间戳部分
| machineId << MACHINE_LEFT // 机器标识部分
| sequence; // 序列号部分
}
private long getNextMill() {
long mill = getNewStamp();
while (mill <= lastStamp) {
mill = getNewStamp();
}
return mill;
}
private long getNewStamp() {
return System.currentTimeMillis();
}
public static void main(String[] args) {
// 192.168.3.104 192.168.3.221测试生成12位id
SnowFlakeUtil snowFlake1 = new SnowFlakeUtil(104);
System.out.println(snowFlake1.nextId());
SnowFlakeUtil snowFlake2 = new SnowFlakeUtil(221);
System.out.println(snowFlake2.nextId());
}
}
package com.mushiny.redisson;
package com.mushiny.pubTools;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment