Commit 6d246f2e authored by ag's avatar ag

style: 调整了一些代码fengge

parent a2182aad
......@@ -19,7 +19,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
<version>1.5.6.RELEASE</version>
</parent>
......
......@@ -25,7 +25,9 @@ import java.util.concurrent.locks.ReentrantLock;
* 1. 使用前在配置文件内配置 DATA_CENTER_ID
* <p>
* <p>
* Created by zhiguo.liu on 2017/5/18.
*
* @author zhiguo.liu
* @date 2017/5/18
*/
@Component
public class IDGenerator {
......@@ -38,27 +40,38 @@ public class IDGenerator {
private static Lock lock = new ReentrantLock();
// data center,默认为 1
/**
* data center,默认为 1
*/
private static int DATA_CENTER_ID = 1;
private static int WORKER_ID = 0;
// 最高支持同时1W台机器
/**
* 最高支持同时1W台机器
*/
private static final int MAX_WORK_ID = 10000;
// 最高每秒发号 100w
/**
* 最高每秒发号 100w
*/
private static final int MAX_COUNT = 999999;
private static AtomicInteger COUNTER = new AtomicInteger(0);
private static long MAX_TIME_SECOND;
// Worker ID 字符串
/**
* Worker ID 字符串
*/
private static String WORKER_ID_STR;
// data center 字符串
/**
* data center 字符串
*/
private static String DATA_CENTER_STR;
// 最长回退时间,120 秒
/**
* 最长回退时间,120 秒
*/
private static int MAX_BACK_SECOND = 120;
static{
static {
Date now = new Date();
Long timeSecond = now.getTime() / 1000;
MAX_TIME_SECOND = timeSecond;
MAX_TIME_SECOND = now.getTime() / 1000;
}
......@@ -82,8 +95,8 @@ public class IDGenerator {
@PostConstruct
public void init() {
WORKER_ID = (int) (redis.opsForValue().increment(REDIS_WORK_ID_KEY + DATA_CENTER_ID, 1) % MAX_WORK_ID);
WORKER_ID_STR = String.format("%04d", WORKER_ID);
int workerId = (int) (redis.opsForValue().increment(REDIS_WORK_ID_KEY + DATA_CENTER_ID, 1) % MAX_WORK_ID);
WORKER_ID_STR = String.format("%04d", workerId);
DATA_CENTER_STR = String.format("%03d", DATA_CENTER_ID);
}
......@@ -98,14 +111,14 @@ public class IDGenerator {
Integer counter = 0;
if (timeSecond > MAX_TIME_SECOND) {
lock.lock();
if(timeSecond > MAX_TIME_SECOND){
if (timeSecond > MAX_TIME_SECOND) {
cache.put(MAX_TIME_SECOND, COUNTER);
COUNTER = new AtomicInteger(0);
MAX_TIME_SECOND = timeSecond;
}
lock.unlock();
}
if(timeSecond == MAX_TIME_SECOND){
if (timeSecond == MAX_TIME_SECOND) {
counter = COUNTER.incrementAndGet();
}
// 时间回退时到 cache 里拿,或者直接抛出错误
......
......@@ -7,7 +7,9 @@ import org.springframework.data.redis.core.RedisTemplate;
import redis.clients.jedis.Jedis;
/**
* Created by zhiguo.liu on 2017/7/28.
*
* @author zhiguo.liu
* @date 2017/7/28
*/
public class RedisUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(RedisUtils.class);
......
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