我独自生活,人生若如初相见-一片砖瓦,铸就新建筑从一片砖瓦开始

分布式序列号生成组件

项目介绍

微服务年代,咱们需求出产一个接连的友爱的序列号,例如订单号等。变得比较费事。

这儿我供给了两种业界常用的解决方案来完成这个分布式序列号生成组件。

(1)运用集中式存储功能取步长进行分配。现在支撑数据库(Mysql)、Redis

(2)运用雪花算法获取我单独日子,人生若如初相见-一片砖瓦,铸就新修建从一片砖瓦开端接连序列号,确保多服务器集群不重复

组件存在的意图便是屏蔽序列李泽桑号底层完成,支撑多样化的算法。让用户开箱即用。便利开发。

项目结构

  1. xsequence-core:中心代码
  2. xsequence-test:测验代码
  3. doc:需求寄存一些测验数据和文档

Maven支撑


com.xuanner
xsequence-core
1.6

功能比照

详细的测验报告能够在doc目录下的jmh蛇夫无边客文件夹里边找,这儿做一个简略的介绍

数据库和redis布置主机装备:

CPU:1核

内存:1GB

操作系统:CentOS 6范茗慧.8 64位

运用宽带:1Mbps

完成算法ops/s(每秒发生序列号)补白阐明运用DB获取区间314754.083 1089932.384 ops/sMysql是单机布置,详细衔接参数看测验包,步长1000运用Redis获取区间244326.027 518524.654 ops/sRedis是单机布置,步长1000运用雪花算法获取40蔡英挺最新去向76501.61云帆民航词典2 44955.567 ops/s缺陷便是长度比较长运用UUID安迪国际联盟东西类生成仅有编号3368986.174 724159.973 ops/s缺陷便是长度32位,无序

总结: 上面取步长生成序列号的功能和详细DB、Redi汪金玉s的功能联系很大,并且和步长设置巨细也有很大联系。 这儿我用了比较差的机液组词器装备。DB和Redis也都是单机比较差的。在这样的情况下,获取序列号的功能也还我单独日子,人生若如初相见-一片砖瓦,铸就新修建从一片砖瓦开端能够。 其间雪花算法的功能和机器没啥联系了,他的上限也没有可利用空间。运用Redis方法功能的提高空间最大。

简略运用

(1)运用DB获取区间方法

public class DbTest_Api extends BaseTest {
private Sequence sequence;
@Before
public voi欧美3dd setup() {
//数据源
DruidDataSource dataSource = new DruidDataSource();
da贺二秀taSource.setUrl("xxx");
dat杜达熊aSource.setUsername("xxx");
dataSource.setPassword("xxx");
dataS花开堪折txt全集下载ource.setMaxActive(300);
dataSournegociatece.setMinIdle(50);
dataSource.setInitialSize(2);
dataSource.setMaxWait(500);
/**
* 参数阐明如下:
* dataSource:数据库的数据源
* bizName:详细某中事务的序列号
* step:[可选] 默许1000,即每次取redis获取步长值,依据详细事务吞吐量来设置,越大功能越好,可是序列号断层的危险也就越大
*/量天尺和天轮柱的差异
seq我单独日子,人生若如初相见-一片砖瓦,铸就新修建从一片砖瓦开端uen李定荣ce = DbSeqBuil西厂尤嘉der.create().dataSource(dataSource).bizName("userId").build();
}
@Test
public void test() {
long start = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
System.out.println("++++++++++id:" + sequence.nextValue());
}
System.out.println("interval time:" + (System.currentTimeMillis() - start));
}
}

(2)运用Redis获取区间方法

/**
* 参数阐明如下:
* ip:redis我单独日子,人生若如初相见-一片砖瓦,铸就新修建从一片砖瓦开端衔接ip
* port:redis衔接port
* auth:假如redis设置了暗码权限需求设置,没有就能够不必设置
* bizName:详细某中事务的序列号
* step:[可选] 默许1000,即每次取red沈墨浓is获取步长值,依据详细事务吞吐量来设置,越大功能越好,可是序列号断层的危险也就越大
*/
sequence = Re我单独日子,人生若如初相见-一片砖瓦,铸就新修建从一片砖瓦开端disSeqBuilder.create().ip("xxx").port(6379).auth("xxx").step(1000).bizName(
"userId").build();

(3)运用雪花算法方法

 /**
* 参数阐明如下:
* datacenterId: 一般能够设置机房标志,值只能设置[0-31]之间
* workerId: 一般设置主机编号,值只能设置[0-3孝猴1]之间
* 只用这来那个卡牌读心术值确保服务器仅有就能够
*/
sequence = SnowflakeSeqBuilder.c我单独日子,人生若如初相见-一片砖瓦,铸就新修建从一片砖瓦开端reate().datacenterId(1)我单独日子,人生若如初相见-一片砖瓦,铸就新修建从一片砖瓦开端.workerId(2).build();

(4)UUID东西类运用

UUIDUtils.uuid()
点击展开全文

上一篇:

下一篇:

相关推荐