auto commit
This commit is contained in:
@@ -103,7 +103,7 @@ namespace Yitter.IdGenerator
|
||||
|
||||
if (MaxSeqNumber == 0)
|
||||
{
|
||||
MaxSeqNumber = (int)Math.Pow(2, SeqBitLength) - 1;
|
||||
MaxSeqNumber = (1 << SeqBitLength) - 1;
|
||||
}
|
||||
|
||||
_TimestampShift = (byte)(WorkerIdBitLength + SeqBitLength);
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace Yitter.IdGenerator
|
||||
throw new ApplicationException("error:WorkerIdBitLength + SeqBitLength <= 22");
|
||||
}
|
||||
|
||||
var maxWorkerIdNumber = Math.Pow(2, options.WorkerIdBitLength) - 1;
|
||||
var maxWorkerIdNumber = (1 << options.WorkerIdBitLength) - 1;
|
||||
if (options.WorkerId < 0 || options.WorkerId > maxWorkerIdNumber)
|
||||
{
|
||||
throw new ApplicationException("WorkerId error. (range:[0, " + (maxWorkerIdNumber > 0 ? maxWorkerIdNumber : 63) + "]");
|
||||
@@ -60,13 +60,13 @@ namespace Yitter.IdGenerator
|
||||
throw new ApplicationException("SeqBitLength error. (range:[2, 21])");
|
||||
}
|
||||
|
||||
var maxSeqNumber = Math.Pow(2, options.SeqBitLength) - 1;
|
||||
var maxSeqNumber = (1 << options.SeqBitLength) - 1;
|
||||
if (options.MaxSeqNumber < 0 || options.MaxSeqNumber > maxSeqNumber)
|
||||
{
|
||||
throw new ApplicationException("MaxSeqNumber error. (range:[1, " + maxSeqNumber + "]");
|
||||
}
|
||||
|
||||
var maxValue = maxSeqNumber; // maxSeqNumber - 1;
|
||||
var maxValue = maxSeqNumber;
|
||||
if (options.MinSeqNumber < 1 || options.MinSeqNumber > maxValue)
|
||||
{
|
||||
throw new ApplicationException("MinSeqNumber error. (range:[1, " + maxValue + "]");
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
package gen
|
||||
|
||||
import (
|
||||
"math"
|
||||
"time"
|
||||
"yitidgen/contract"
|
||||
"yitidgen/core"
|
||||
@@ -33,7 +32,7 @@ func NewDefaultIdGenerator(options *contract.IdGeneratorOptions) *DefaultIdGener
|
||||
panic("error:WorkerIdBitLength + SeqBitLength <= 22")
|
||||
}
|
||||
|
||||
maxWorkerIdNumber := uint16(math.Pow(float64(2), float64(options.WorkerIdBitLength))) - 1
|
||||
maxWorkerIdNumber := uint16(1<<options.WorkerIdBitLength) - 1
|
||||
if options.WorkerId > maxWorkerIdNumber {
|
||||
panic("WorkerId error. (range:[1, " + string(maxWorkerIdNumber) + "]")
|
||||
}
|
||||
@@ -42,7 +41,7 @@ func NewDefaultIdGenerator(options *contract.IdGeneratorOptions) *DefaultIdGener
|
||||
panic("SeqBitLength error. (range:[2, 21])")
|
||||
}
|
||||
|
||||
maxSeqNumber := uint32(math.Pow(2, float64(options.SeqBitLength))) - 1
|
||||
maxSeqNumber := uint32(1<<options.SeqBitLength) - 1
|
||||
if options.MaxSeqNumber > maxSeqNumber {
|
||||
panic("MaxSeqNumber error. (range:[1, " + string(maxSeqNumber) + "]")
|
||||
}
|
||||
|
||||
@@ -1,79 +1,79 @@
|
||||
/*
|
||||
* 版权属于:yitter(yitter@126.com)
|
||||
* 开源地址:https://gitee.com/yitter/idgenerator
|
||||
*/
|
||||
package com.yitter.idgen;
|
||||
|
||||
import com.yitter.contract.ISnowWorker;
|
||||
import com.yitter.contract.IdGeneratorException;
|
||||
import com.yitter.contract.IdGeneratorOptions;
|
||||
import com.yitter.contract.IIdGenerator;
|
||||
import com.yitter.core.SnowWorkerM1;
|
||||
import com.yitter.core.SnowWorkerM2;
|
||||
|
||||
|
||||
public class DefaultIdGenerator implements IIdGenerator {
|
||||
|
||||
private static ISnowWorker _SnowWorker = null;
|
||||
|
||||
public DefaultIdGenerator(IdGeneratorOptions options) throws IdGeneratorException {
|
||||
if (options == null) {
|
||||
throw new IdGeneratorException("options error.");
|
||||
}
|
||||
|
||||
if (options.BaseTime < 315504000000L || options.BaseTime > System.currentTimeMillis()) {
|
||||
throw new IdGeneratorException("BaseTime error.");
|
||||
}
|
||||
|
||||
if (options.WorkerIdBitLength <= 0) {
|
||||
throw new IdGeneratorException("WorkerIdBitLength error.(range:[1, 21])");
|
||||
}
|
||||
if (options.SeqBitLength + options.WorkerIdBitLength > 22) {
|
||||
throw new IdGeneratorException("error:WorkerIdBitLength + SeqBitLength <= 22");
|
||||
}
|
||||
|
||||
double maxWorkerIdNumber = Math.pow(2, options.WorkerIdBitLength) - 1;
|
||||
if (options.WorkerId < 0 || options.WorkerId > maxWorkerIdNumber) {
|
||||
throw new IdGeneratorException("WorkerId error. (range:[0, " + (maxWorkerIdNumber > 0 ? maxWorkerIdNumber : 63) + "]");
|
||||
}
|
||||
|
||||
if (options.SeqBitLength < 2 || options.SeqBitLength > 21) {
|
||||
throw new IdGeneratorException("SeqBitLength error. (range:[2, 21])");
|
||||
}
|
||||
|
||||
double maxSeqNumber = Math.pow(2, options.SeqBitLength) - 1;
|
||||
if (options.MaxSeqNumber < 0 || options.MaxSeqNumber > maxSeqNumber) {
|
||||
throw new IdGeneratorException("MaxSeqNumber error. (range:[1, " + maxSeqNumber + "]");
|
||||
}
|
||||
|
||||
double maxValue = maxSeqNumber;
|
||||
if (options.MinSeqNumber < 1 || options.MinSeqNumber > maxValue) {
|
||||
throw new IdGeneratorException("MinSeqNumber error. (range:[1, " + maxValue + "]");
|
||||
}
|
||||
|
||||
switch (options.Method) {
|
||||
case 1:
|
||||
_SnowWorker = new SnowWorkerM1(options);
|
||||
break;
|
||||
case 2:
|
||||
_SnowWorker = new SnowWorkerM2(options);
|
||||
break;
|
||||
default:
|
||||
_SnowWorker = new SnowWorkerM1(options);
|
||||
break;
|
||||
}
|
||||
|
||||
if (options.Method == 1) {
|
||||
try {
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long newLong() {
|
||||
return _SnowWorker.nextId();
|
||||
}
|
||||
}
|
||||
/*
|
||||
* 版权属于:yitter(yitter@126.com)
|
||||
* 开源地址:https://gitee.com/yitter/idgenerator
|
||||
*/
|
||||
package com.yitter.idgen;
|
||||
|
||||
import com.yitter.contract.ISnowWorker;
|
||||
import com.yitter.contract.IdGeneratorException;
|
||||
import com.yitter.contract.IdGeneratorOptions;
|
||||
import com.yitter.contract.IIdGenerator;
|
||||
import com.yitter.core.SnowWorkerM1;
|
||||
import com.yitter.core.SnowWorkerM2;
|
||||
|
||||
|
||||
public class DefaultIdGenerator implements IIdGenerator {
|
||||
|
||||
private static ISnowWorker _SnowWorker = null;
|
||||
|
||||
public DefaultIdGenerator(IdGeneratorOptions options) throws IdGeneratorException {
|
||||
if (options == null) {
|
||||
throw new IdGeneratorException("options error.");
|
||||
}
|
||||
|
||||
if (options.BaseTime < 315504000000L || options.BaseTime > System.currentTimeMillis()) {
|
||||
throw new IdGeneratorException("BaseTime error.");
|
||||
}
|
||||
|
||||
if (options.WorkerIdBitLength <= 0) {
|
||||
throw new IdGeneratorException("WorkerIdBitLength error.(range:[1, 21])");
|
||||
}
|
||||
if (options.SeqBitLength + options.WorkerIdBitLength > 22) {
|
||||
throw new IdGeneratorException("error:WorkerIdBitLength + SeqBitLength <= 22");
|
||||
}
|
||||
|
||||
int maxWorkerIdNumber = (1 << options.WorkerIdBitLength) - 1;
|
||||
if (options.WorkerId < 0 || options.WorkerId > maxWorkerIdNumber) {
|
||||
throw new IdGeneratorException("WorkerId error. (range:[0, " + (maxWorkerIdNumber > 0 ? maxWorkerIdNumber : 63) + "]");
|
||||
}
|
||||
|
||||
if (options.SeqBitLength < 2 || options.SeqBitLength > 21) {
|
||||
throw new IdGeneratorException("SeqBitLength error. (range:[2, 21])");
|
||||
}
|
||||
|
||||
int maxSeqNumber = (1 << options.SeqBitLength) - 1;
|
||||
if (options.MaxSeqNumber < 0 || options.MaxSeqNumber > maxSeqNumber) {
|
||||
throw new IdGeneratorException("MaxSeqNumber error. (range:[1, " + maxSeqNumber + "]");
|
||||
}
|
||||
|
||||
int maxValue = maxSeqNumber;
|
||||
if (options.MinSeqNumber < 1 || options.MinSeqNumber > maxValue) {
|
||||
throw new IdGeneratorException("MinSeqNumber error. (range:[1, " + maxValue + "]");
|
||||
}
|
||||
|
||||
switch (options.Method) {
|
||||
case 1:
|
||||
_SnowWorker = new SnowWorkerM1(options);
|
||||
break;
|
||||
case 2:
|
||||
_SnowWorker = new SnowWorkerM2(options);
|
||||
break;
|
||||
default:
|
||||
_SnowWorker = new SnowWorkerM1(options);
|
||||
break;
|
||||
}
|
||||
|
||||
if (options.Method == 1) {
|
||||
try {
|
||||
Thread.sleep(500);
|
||||
} catch (InterruptedException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public long newLong() {
|
||||
return _SnowWorker.nextId();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 介绍
|
||||
|
||||
1.用一种全新的雪花漂移算法,让ID更短、生成速度更快。
|
||||
1.一个全新的雪花漂移算法,使生成的ID更短、速度更快。
|
||||
|
||||
2.核心在于缩短ID长度的同时,还能拥有极高瞬时并发处理量(保守值 50W/0.1s)。
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ impl SnowWorkerM1 {
|
||||
if options.BaseTime == 0 {
|
||||
self.BaseTime = 1582136402000;
|
||||
} else if options.BaseTime < 631123200000 || options.BaseTime > Utc::now().timestamp_millis() {
|
||||
panic!("BaseTime error.")
|
||||
panic!("BaseTime error.");
|
||||
} else {
|
||||
self.BaseTime = options.BaseTime;
|
||||
}
|
||||
@@ -58,39 +58,39 @@ impl SnowWorkerM1 {
|
||||
panic!("WorkerIdBitLength error.(range:[1, 21])");
|
||||
}
|
||||
if options.SeqBitLength + options.WorkerIdBitLength > 22 {
|
||||
panic!("error:WorkerIdBitLength + SeqBitLength <= 22")
|
||||
panic!("error:WorkerIdBitLength + SeqBitLength <= 22");
|
||||
} else {
|
||||
self.WorkerIdBitLength = options.WorkerIdBitLength;
|
||||
// self.WorkerIdBitLength = if options.WorkerIdBitLength == 0 { 6 } else { options.WorkerIdBitLength };
|
||||
// self.WorkerIdBitLength = options.WorkerIdBitLength;
|
||||
self.WorkerIdBitLength = if options.WorkerIdBitLength <= 0 { 6 } else { options.WorkerIdBitLength };
|
||||
}
|
||||
|
||||
// WorkerId
|
||||
let maxWorkerIdNumber = (2 as u32).pow(options.WorkerIdBitLength as u32) - 1;
|
||||
let maxWorkerIdNumber = (1 << options.WorkerIdBitLength) - 1;
|
||||
if options.WorkerId < 0 || options.WorkerId > maxWorkerIdNumber {
|
||||
panic!("WorkerId error. (range:[0, {} ]", if maxWorkerIdNumber <= 0 { 63 } else { maxWorkerIdNumber })
|
||||
panic!("WorkerId error. (range:[0, {} ]", if maxWorkerIdNumber <= 0 { 63 } else { maxWorkerIdNumber });
|
||||
} else {
|
||||
self.WorkerId = options.WorkerId;
|
||||
}
|
||||
|
||||
// SeqBitLength
|
||||
if options.SeqBitLength < 2 || options.SeqBitLength > 21 {
|
||||
panic!("SeqBitLength error. (range:[2, 21])")
|
||||
panic!("SeqBitLength error. (range:[2, 21])");
|
||||
} else {
|
||||
self.SeqBitLength = options.SeqBitLength;
|
||||
// self.SeqBitLength = if options.SeqBitLength == 0 { 6 } else { options.SeqBitLength };
|
||||
// self.SeqBitLength = options.SeqBitLength;
|
||||
self.SeqBitLength = if options.SeqBitLength <= 0 { 6 } else { options.SeqBitLength };
|
||||
}
|
||||
|
||||
// MaxSeqNumber
|
||||
let maxSeqNumber = (2 as u32).pow(options.SeqBitLength as u32) - 1;
|
||||
let maxSeqNumber = (1 << options.SeqBitLength) - 1;
|
||||
if options.MaxSeqNumber > maxSeqNumber {
|
||||
panic!("MaxSeqNumber error. (range:[1, {}]", maxSeqNumber)
|
||||
panic!("MaxSeqNumber error. (range:[1, {}]", maxSeqNumber);
|
||||
} else {
|
||||
self.MaxSeqNumber = if options.MaxSeqNumber <= 0 { (2 as u32).pow(options.SeqBitLength as u32) - 1 } else { options.MaxSeqNumber };
|
||||
self.MaxSeqNumber = if options.MaxSeqNumber <= 0 { maxSeqNumber } else { options.MaxSeqNumber };
|
||||
}
|
||||
|
||||
// MinSeqNumber
|
||||
if options.MinSeqNumber > maxSeqNumber {
|
||||
panic!("MinSeqNumber error. (range:[1, {}]", maxSeqNumber)
|
||||
panic!("MinSeqNumber error. (range:[1, {}]", maxSeqNumber);
|
||||
} else {
|
||||
self.MinSeqNumber = options.MinSeqNumber;
|
||||
}
|
||||
@@ -100,7 +100,7 @@ impl SnowWorkerM1 {
|
||||
self._CurrentSeqNumber = options.MinSeqNumber;
|
||||
|
||||
if options.Method == 1 {
|
||||
sleep(std::time::Duration::from_millis(500))
|
||||
sleep(std::time::Duration::from_millis(500));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user