xsequence 分布式序列号生成组件 1.2 更新啦 - 开源中国社区
Float_left Icon_close
xsequence 分布式序列号生成组件 1.2 更新啦
徐安是个好人 2018年05月29日

xsequence 分布式序列号生成组件 1.2 更新啦

徐安是个好人 徐安是个好人 发布于2018年05月29日 收藏 25

做APP,小程序就上开源众包。世界杯期间免费领2600元启动金。>>>  

软件地址:

分布式序列号生成组件1.2更新啦,项目地址:https://gitee.com/xuan698400/xsequence

介绍说明:

微服务时代,我们需要生产一个连续的序列号,变得比较麻烦。 这里使用了Mysql实现了一个简单的分布式序列号生成组件。后续还可以支持redis等其他高效中间件。 当然还有一种叫雪花算法的序列号生成器,这种算法有个缺点就是长度太长,不是真正意义的从1开始累加序列。 当然秉着包容万象的心态,后续可以实现进去,让用户自己根据特定场景选择算法。幸运的是1.2版本这3种都支持了。

版本说明:

V1.0时代
支持DB方式生成序列号,使用说明文章:https://my.oschina.net/u/1271235/blog/1808103
更新时间:2018/05/07 

------------------------------------------------------------------------------

V1.1时代

支持Redis方式生成序列号,使用说明文章:https://my.oschina.net/u/1271235/blog/1809437

更新时间:2018/05/09 

------------------------------------------------------------------------------

V1.2时代

支持雪花算法方式生成序列号,使用说明文章:https://my.oschina.net/u/1271235/blog/1812305

更新时间:2018/05/14 

使用教程:

(1)API使用方式

public class SnowflakeTest_Api {

    private Sequence userSeq;

    @Before
    public void setup() {

        SnowflakeSequence snowflakeSequence = new SnowflakeSequence();
        snowflakeSequence.setDatacenterId(1);
        snowflakeSequence.setWorkerId(2);
        userSeq = snowflakeSequence;
    }

    @Test
    public void test() {
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100; i++) {
            System.out.println("++++++++++id:" + userSeq.nextValue());
        }
        System.out.println("interval time:" + (System.currentTimeMillis() - start));
    }
}

(2)Spring使用方式

xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd" default-autowire="byName"
       default-lazy-init="false">
    
    <!-- 具体使用demo -->
    <bean id="userSeq" class="com.xuanner.seq.sequence.impl.SnowflakeSequence">
        <property name="workerId" value="1"/>
        <property name="datacenterId" value="2"/>
    </bean>
</beans>

代码使用

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:snowflake-test.xml" })
public class SnowflakeTest_Spring {

    @Autowired
    private Sequence userSeq;

    @Test
    public void test() {
        for (int i = 0; i < 1000; i++) {
            System.out.println("++++++++++id:" + userSeq.nextValue());
        }
    }

}
本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:xsequence 分布式序列号生成组件 1.2 更新啦
分享
评论(6)
精彩评论
多个服务器中保证唯一吗
1
性能如何?我们正好有这个需求,峰值的时候大概需要每秒分配2000w序号
1
错别字:“3钟”->"3种"
最新评论
0

引用来自“xflcx1991”的评论

错别字:“3钟”->"3种"
真细心
0

引用来自“RAINJUNIOR”的评论

性能如何?我们正好有这个需求,峰值的时候大概需要每秒分配2000w序号
雪花算法一秒大概只能产生26W个序列号。不过你可以使用redis取步长的方式生成序列号。组件也支持的。假设你的redis集群能支持操作TPS 2W的话,你只要把步长设置成1000就可以支持到每秒2000W个序列号了。具体测试数据,这两天我看看 出个测试报告
0

引用来自“开源中国首席睡觉专家”的评论

多个服务器中保证唯一吗
肯定保证唯一的
多个服务器中保证唯一吗
1
性能如何?我们正好有这个需求,峰值的时候大概需要每秒分配2000w序号
1
错别字:“3钟”->"3种"
顶部