go语言snowflake雪花算法
-
依据Go 语言实现的 Snowflake 算法,能够为分布式系统生成唯一ID,单机测试1秒可生成20万ID。
Snowflake雪花算法产生的背景是为了解决twitter高并发环境下对唯一ID生成的需求,并且得益于twitter内部牛逼的技术,实际在业务中,会需要使用一些唯一的ID,用来记录我们某个数据的标识。
最常用的记录方式无非以下几种:UUID方式、数据库自身自增主键、Redis的Incr命令等方法来获取一个唯一的值。
Snowflake雪花算法的原始版本是scala版,最开始的存在是用于生成分布式ID,以纯数字的方式,并且按照时间顺序,应用在实际中还可以生成订单编号等。
数据库自增ID:劣势在于对于数据敏感场景不宜使用,且不适合于分布式场景。 GUID:使用时会采用无意义字符串,且数据量增大时造成访问过慢,最大的缺陷在于不宜排序。
Snowflake 结构是一个 64bit 的 int64 类型的数据。在应用到实际情况时可以根据自己的业务情况进行调整。
Snowflake雪花算法的实现步骤是非常简单的,首先需要获取当前的毫秒时间戳;并且用当前的毫秒时间戳和上次保存的时间戳进行比较;此时会出现两种情况,如果和上次保存的时间戳相等,那么对序列号 sequence 加一;如果不相等,那么直接设置 sequence 为 0 即可;然后通过或运算拼接雪花算法需要返回的 int64 返回值。
西南地区IT社群(QQ)
- 云南
- 【昆明网页设计交流吧】243627302
- 【昆明nodejs交流吧】 243626749
- 【VUE】838405306
- 【云南程序员总群】343606807
- 【昆明UI设计】104031254
- 【云南软件外包】15547313
- 贵州
- 【PHP/java源码/站长交流群】55692114
- 四川
- 【成都Java/JavaWeb交流】86669225
- 【vaScript+PHP+MySql】116270060
- 【UI设计/设计交流学习群】135794928
- 重庆
- 【诺基亚 JAVA游戏博物馆】 559479780
- 【PHP,Java,Python,C++接单】 442103442
- 西藏