在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:分布式序列号生成组件开源软件地址:https://gitee.com/xuan698400/xsequence开源软件介绍:分布式序列号生成组件项目介绍微服务时代,我们需要生产一个连续的友好的序列号,例如订单号等。变得比较麻烦。 项目结构
Maven支持<dependency> <groupId>com.xuanner</groupId> <artifactId>xsequence-core</artifactId> <version>1.6</version></dependency> 升级日志v1.0 v1.1 v1.2 v1.3 v1.4 v1.5 v1.6 性能对比具体的测试报告可以在doc目录下的jmh文件夹里面找,这里做一个简单的介绍 数据库和redis部署主机配置:
总结:上面取步长生成序列号的性能和具体DB、Redis的性能关系很大,而且和步长设置大小也有很大关系。这里我用了比较差的机器配置。DB和Redis也都是单机比较差的。在这样的情况下,获取序列号的性能也还可以。其中雪花算法的性能和机器没啥关系了,他的上限也没有可利用空间。使用Redis方式性能的提升空间最大。 简单使用(1)使用DB获取区间方式 public class DbTest_Api extends BaseTest { private Sequence sequence; @Before public void setup() { //数据源 DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl("xxx"); dataSource.setUsername("xxx"); dataSource.setPassword("xxx"); dataSource.setMaxActive(300); dataSource.setMinIdle(50); dataSource.setInitialSize(2); dataSource.setMaxWait(500); /** * 参数说明如下: * dataSource:数据库的数据源 * bizName:具体某中业务的序列号 * step:[可选] 默认1000,即每次取redis获取步长值,根据具体业务吞吐量来设置,越大性能越好,但是序列号断层的风险也就越大 */ sequence = DbSeqBuilder.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,即每次取redis获取步长值,根据具体业务吞吐量来设置,越大性能越好,但是序列号断层的风险也就越大 */sequence = RedisSeqBuilder.create().ip("xxx").port(6379).auth("xxx").step(1000).bizName( "userId").build(); (3)使用雪花算法方式 /** * 参数说明如下: * datacenterId: 一般可以设置机房标志,值只能设置[0-31]之间 * workerId: 一般设置主机编号,值只能设置[0-31]之间 * 只用这来那个值保证服务器唯一就可以 */sequence = SnowflakeSeqBuilder.create().datacenterId(1).workerId(2).build(); (4)UUID工具类使用 UUIDUtils.uuid() 联系方式
|
请发表评论