一、雪花算法介绍
Snowflake,雪花算法是有Twitter开源的分布式ID生成算法,以划分命名空间的方式将64bit位分割成了多个部分,每个部分都有具体的不同含义,在Java中64Bit位的整数是Long类型,所以在Java中Snowflake算法生成的ID就是long来存储的。具体如下:
第一部分:占用1bit,第一位为符号位,不适用
第二部分:41位的时间戳,41bit位可以表示241个数,每个数代表的是毫秒,那么雪花算法的时间年限是(241)/(1000606024365)=69年
第三部分:10bit表示是机器数,即 2^ 10 = 1024台机器,通常不会部署这么多机器
第四部分:12bit位是自增序列,可以表示2^12=4096个数,一秒内可以生成4096个ID
二、案例代码:
参考官网地址给出服务器托管网的demo
https://github.com/search?q=snowflake+language%3AJava&type=repositories&l=Java
package com.boge.vip.utils;
/**
* Twitter_Snowflake
* SnowFlake的结构如下(每部分用-分开):
* 0 - 0000000000 0000000000 0000000000 0000000000 0 - 000服务器托管网00 - 00000 - 000000000000
* 1位标识,由于long基本类型在Java中是带符号的,最高位是符号位,正数是0,负数是1,所以id一般是正数,最高位是0
* 41位时间截(毫秒级),注意,41位时间截不是存储当前时间的时间截,而是存储时间截的差值(当前时间截 - 开始时间截)
* 得到的值),这里的的开始时间截,一般是我们的id生成器开始使用的时间,由我们程序来指定的(如下下面程序IdWorker类的startTime属性)。41位的时间截,可以使用69年,年T = (1L maxWorkerId || workerId maxDatacenterId || datacenterId
如果对你有帮助,可以关注博主(不定期更新各种技术文档) 给博主一个免费的点赞以示鼓励,谢谢 !
欢迎各位点赞评论收藏⭐️
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net