# snowflake-utils
**Repository Path**: duanxinyuan/snowflake-utils
## Basic Information
- **Project Name**: snowflake-utils
- **Description**: 雪花Id(分布式Id)算法工具库
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-09-08
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 雪花Id(分布式Id)算法工具库
## Twitter雪花算法-普通版
Twitter的雪花算法,用于生成分布式Id
### Maven依赖
```xml
com.github.duanxinyuan
util-snowflake
```
* Twitter雪花算法工具类:SnowflakeIdUtils
## Twitter雪花算法-完美版
* **增加了使用Redis分配workerId和datacenterId的逻辑,确保不会重复**
* **最多可以分配32*32=1024个workerId+datacenterId的组合**
### Maven依赖
```xml
com.github.duanxinyuan
util-snowflake-prefect
```
* Twitter雪花算法工具类:SnowflakeIdUtils
### 配置示例
#### properties 配置示例
```properties
#雪花算法模块名
snowflake.module=test
#Redis缓存类型,single/sentinel/sharded/cluster,必须配置
cache.redis.type.snowflake=single
#Redis节点信息列表,多个使用逗号隔开,必须配置
cache.redis.nodes.snowflake=127.0.0.1:6380
#Redis密码,没有密码不需要配置
cache.redis.password.snowflake=123456
```
#### yaml 配置示例
```yaml
snowflake:
#雪花算法模块名
module: test
cache:
redis:
#Redis缓存类型,single/sentinel/sharded/cluster,必须配置
type:
snowflake: single
#Redis节点信息列表,多个使用逗号隔开,必须配置
nodes:
snowflake: 127.0.0.1:6380
#Redis密码,没有密码不需要配置
password:
snowflake: 123456
```
### 使用示例
```java
import com.dxy.library.json.jackson.JacksonUtil;
import com.dxy.library.snowflake.SnowflakeIdUtils;
import org.junit.Test;
import java.time.Clock;
import java.util.List;
import java.util.Map;
/**
* @author duanxinyuan
* 2019/1/14 21:54
*/
public class SnowflakeIdUtilsTest {
@Test
public void getAllDataCenterWorkerId() {
Map> allDataCenterWorkerId = SnowflakeIdUtils.getAllDataCenterWorkerId();
System.out.println(JacksonUtil.to(allDataCenterWorkerId));
}
@Test
public void getWorkerId() {
long workerId = SnowflakeIdUtils.getWorkerId();
long datacenterId = SnowflakeIdUtils.getDatacenterId();
System.out.println(workerId);
System.out.println(datacenterId);
}
@Test
public void testSnowflakeId() {
System.out.println(SnowflakeIdUtils.getAsLong());
System.out.println(SnowflakeIdUtils.getAsString());
}
@Test
public void testSnowflakeIdBatch() {
long start = Clock.systemUTC().millis();
for (int i = 0; i < 100000; i++) {
System.out.println(SnowflakeIdUtils.getAsLong());
}
System.out.println(Clock.systemUTC().millis() - start);
}
}
```