项目地址 :     https://github.com/kelin-xycs/SeqIDGenerator

今天 QQ 群 里有网友问起产生唯一 ID 的方法 有哪些,  讨论了各种方法 。

有网友提到 Twitter 的 雪花算法 :       https://blog.csdn.net/w200221626/article/details/52064976

我觉得 GUID 的 优点 是 简单 高效, 缺点 是 可读性 比较差 。

高效 是指 相比起 要到 数据库 读取 种子(当前最大序号) 等的方式,  同时 也 简单,  不会出什么问题 。

如果 对 可读性 有要求, 比如 要 显示给 用户 看,  或者 便于 维护,  可以使用 针对业务 产生的 连续序号 ID , 比如 订单号 。

如果 对 可读性 没什么要求, 那么 用 GUID 就行 。 或者说, 对 可读性 没太多要求 的 场合 可以 通用  GUID 。

但很多时候 我们 也希望使用 可读性好的 连续序号 ID ,  所以就想有一个 简单的 通用的 产生 连续序号 ID 的 方法 。

所以, 就想出了一个 和 Twitter 雪花算法 类似 的 算法 :

这种算法 产生的 ID 格式如下 :

时间戳-机器ID-序号

时间戳 就是 “20181106213913983”  这样,  表示  2018年11月06日21点39分13秒983毫秒  ,     时间戳 取到 毫秒 。

机器ID 就是 计算机 ID, 或者说 服务器 ID,  因为现在 高并发 负载均衡 集群 很常见, 所以需要考虑 多台 Server 并行作业 时 的 情况 。 并行作业 的 Server 之间的 连续序号 ID 不能重复, 对此, Twitter 雪花算法 是 通过 给 每个 Server 一个 机器ID 来区分 , 所以 我们 也学 Twitter 雪花算法 这样 。

机器ID 在 App.config 中 配置 :

机器ID 可以 自己随便配置, 不过考虑到 连续序号 ID 的 排序 查询 等,  取成 固定位数 的 数字 比较好 ,  比如 上图 中的  “0000”,

4 位 数字 可以支持  1 万  台 Server  (0000 ~ 9999) 。

序号 是指 这台计算机上 当前这一毫秒 内 连续序号 ID 的 序号, 这一毫秒内 第一个 连续序号 ID 的 序号 是 0, 第二个是 1, 第三个是 2, 第四个是 3  ……   ,  以此类推 。 到下一毫秒 序号 会重置为 从 0 重新开始 。

现在程序中写死的 序号 格式 是 4 位 数字,  4 位 数字 可以支持在  一台计算机(多核)上   每毫秒 产生  1 万  个  ID  (0000 ~ 9999)  。

效果如下 :        (运行 解决方案 中的 Demo 项目 就可看到)

一个类似 Twitter 雪花算法 的 连续序号 ID 产生器 SeqIDGenerator的更多相关文章

  1. Twitter雪花算法 SnowFlake算法 的java实现

    概述 SnowFlake算法是Twitter设计的一个可以在分布式系统中生成唯一的ID的算法,它可以满足Twitter每秒上万条消息ID分配的请求,这些消息ID是唯一的且有大致的递增顺序. 原理 Sn ...

  2. mybatis plus 主键生成 Twitter雪花算法 id 及修改id为字符型

    mybatis plus配置主键生成策略为2,就是 使用Twitter雪花算法 生成id spring boot中配置为: GlobalConfiguration conf = new GlobalC ...

  3. 基于雪花算法的增强版ID生成器

    sequence 基于雪花算法的增强版ID生成器 解决了时间回拨的问题 无需手动指定workId, 微服务环境自适应 可配置化 快速开始 依赖引入 <dependency> <gro ...

  4. java 雪花算法实现获取分布式id

    import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkI ...

  5. Twitter雪花算法SnowFlake算法的java实现

    https://juejin.im/post/5c75132f51882562276c5065 package javaDemo; /** * twitter的snowflake算法 -- java实 ...

  6. snowflake 雪花算法 分布式实现全局id生成

    snowflake是Twitter开源的分布式ID生成算法,结果是一个long型的ID. 这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案 ...

  7. 雪花算法生成全局唯一ID

    系统中某些场景少不了全局唯一ID的使用,来保证数据的唯一性.除了通过数据库自带的自增id来保证 id 的唯一性,通常为了保证的数据的可移植性会选择通过程序生成全局唯一 id.百度了不少php相关的生成 ...

  8. 分布式ID的雪花算法及坑

    分布式ID生成是目前系统的常见刚需,其中以Twitter的雪花算法(Snowflake)比较知名,有Java等各种语言的版本及各种改进版本,能生成满足分布式ID,返回ID为Long长整数 但是这里有一 ...

  9. Snowflake(雪花算法),什么情况下会冲突?

    文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info 分布式系统中,有一些需要使用全局唯一 ID 的场景,这种时候为了防止 ID 冲突可以使用 36 位的 UUI ...

随机推荐

  1. 12.Python爬虫利器三之Xpath语法与lxml库的用法

    LXML解析库使用的是Xpath语法: XPath 是一门语言 XPath可以在XML文档中查找信息 XPath支持HTML XPath通过元素和属性进行导航 XPath可以用来提取信息 XPath比 ...

  2. 安装vue-cookie

    // 安装cookie的命令// npm install vue-cookie --save// 为项目配置全局vue-cookieimport VueCookie from 'vue-cookie' ...

  3. React-Native 上拉加载下拉刷新

    react-native 上下拉加载的控件效果都不好,找了半天没找到,正打算自已封装的时候,无意中找到了一个比较好的控件,大家看一下: react-native-refresh-list-view 这 ...

  4. ubuntu + samba 共享失败

    主机版本:ubuntu14.04 问题描述:Samba服务配置后仍然不通. samba服务这么成熟的东西,本以为在ubuntu上修改下smb.conf重启就得了,但是访问还是失败. 表现是,可以看到s ...

  5. phpstorm使用zen coding 快速编辑补全html/css代码

    百科定义: 使用仿CSS选择器的语法来快速开发HTML和CSS ——由Sergey Chikuyonok开发. Zen Coding由两个核心组件组成:一个缩写扩展器(缩写为像CSS一样的选择器)和上 ...

  6. help2man: can't get `--help' info from automake-1.15 Try `--no-discard-stderr' if option outputs to stderr Makefile:3687: recipe for target 'doc/automake-1.15.1' failed

    /********************************************************************** * help2man: can't get `--hel ...

  7. python time 时间处理

    a='2018-03-26 17:20:11' >>> print time.strftime("%Y%m%d", a)Traceback (most recen ...

  8. url的使用

    1.urls.py 默认是在主目录中,主路由配置文件,会包含最基本的地址映射,并且每个地址访问都必须要先经过该文件. 作用:通过 urls中定义好的地址找到对应的视图处理函数 urlpatterns ...

  9. [LeetCode&Python] Problem 171. Excel Sheet Column Number

    Given a column title as appear in an Excel sheet, return its corresponding column number. For exampl ...

  10. CH0101 a^b、 CH0102 64位整数乘法(快速幂、快速乘)【模板题】

    题目链接:传送门    //a^b   传送门    //64位整数乘法 题目: 描述 求 a 的 b 次方对 p 取模的值,其中 ≤a,b,p≤^ 输入格式 三个用空格隔开的整数a,b和p. 输出格 ...