生成全局唯一id的几种方式:

1、uuid生成全球唯一id,生成方式简单粗暴,本地生成,没有网络开销,效率高;缺点长度较长,没有递增趋势性,不易维护,常用于生成token令牌。

2、mysql自带自增生成id,oracle可以用序列生成id,但在数据库集群环境下,扩展性不好。

3、基于redis单线程的特点生成全局唯一id,redis性能高。

生成id为当前日期(yyMMddHHmmss)+6位(从000000开始不足位数补0)

20200206164329000001

4、基于雪花算法snowflake 生成全局id,本地生成,没有网络开销,效率高

原理

Twitter的雪花算法SnowFlake。

SnowFlake算法产生的ID是一个64位的整型,结构如下(每一部分用“-”符号分隔):

0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 000000000000

1位标识部分,在java中由于long的最高位是符号位,正数是0,负数是1,一般生成的ID为正数,所以为0;

41位时间戳部分,这个是毫秒级的时间,一般实现上不会存储当前的时间戳,而是时间戳的差值(当前时间-固定的开始时间),

这样可以使产生的ID从更小值开始;41位的时间戳可以使用69年,(1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69年;

10位节点部分,Twitter实现中使用前5位作为数据中心标识,后5位作为机器标识,可以部署1024个节点;

12位序列号部分,支持同一毫秒内同一个节点可以生成4096个ID;

SnowFlake算法生成的ID大致上是按照时间递增的,用在分布式系统中时,需要注意数据中心标识和机器标识必须唯一,

这样就能保证每个节点生成的ID都是唯一的。或许我们不一定都需要像上面那样使用5位作为数据中心标识,5位作为机器标识,可以根据我们业务的需要,灵活分配节点部分,如:若不需要数据中心,完全可以使用全部10位作为机器标识;若数据中心不多,也可以只使用3位作为数据中心,7位作为机器标识。

snowflake生成的ID整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),并且效率较高。

5、 zookeeper通过创建顺序节点生成全局id,在高并发场景下,性能不能很好。(暂时未研究)

redis请参考

https://github.com/sentianhui/idglobal.git

全局唯一递增的id_生成全局唯一id的几种方式相关推荐

  1. 全局唯一递增的id_分布式系统全局唯一ID简介、特点、生成

    一.什么是分布式系统唯一ID 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识. 如在金融.电商.支付.等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息, ...

  2. JavaScript 生成唯一ID的几种方式

    这篇文章主要介绍了JavaScript 生成唯一ID的几种方式,帮助大家更好的理解和使用JavaScript,感兴趣的朋友可以了解下. 编程的世界里,在很多的时候,我们都需要一个唯一的ID来代表一些数 ...

  3. Vue中生成二维码的一种方式—vue-qr

    Vue中生成二维码的一种方式-vue-qr vue实现二维码生成(vue + vue-qr)

  4. 全局唯一递增的id_分布式ID生成方法-趋势有序的全局唯一ID

    一.需求缘起 几乎所有的业务系统,都有生成一个记录标识的需求,例如: (1)消息标识:message-id (2)订单标识:order-id (3)帖子标识:tiezi-id 这个记录标识往往就是数据 ...

  5. 全局唯一递增的id_全局唯一性ID生成方法小结

    全局ID通常要满足分片的一些要求: 1 不能有单点故障. 2 以时间为序,或者ID里包含时间.这样一是可以少一个索引,二是冷热数据容易分离. 3 可以控制ShardingId.比如某一个用户的文章要放 ...

  6. Java生成唯一id的几种方式(已验证)

    1.数据库自增序列方式 数据库方式比较简单,比如oracle可以用序列生成id,Mysql中的AUTO_INCREMENT等,这样可以生成唯一的ID,性能和稳定性依赖于数据库!如mysql主键递增: ...

  7. 利用jquery的qrcode.js插件生成二维码的两种方式的使用

    2019独角兽企业重金招聘Python工程师标准>>> 利用jquery的qrcode.js插件生成二维码的额两种方式,canvas(即画布)方式和table方式(原文地址http: ...

  8. 关于利用qrcode生成二维码的两种方式的区别

    首先以下内容是查找网上资料后了解的利用qrcode.js生成二维码的额两种方式,canvas(即画布)方式和table方式(原文地址http://www.helloweba.com/view-blog ...

  9. android 获取蓝牙设备id_获取设备唯一ID的几种方式

    博客摘要:很简单,就是获取设备的唯一ID,直接上正文. 先来看看几种比较单一的方式: IMEI 方式:TelephonyManager.getDeviceId(): 问题 范围:只能支持拥有通话功能的 ...

最新文章

  1. 查看idea的错误日志信息
  2. sqlyog设置自动补全_sqlyog智能提示如何设置?sqlyog智能提示设置流程介绍
  3. LeetCode 61旋转链表-中等
  4. 拼多多市值超2100亿美元 黄峥成中国第二大富豪
  5. PHP函数调用及循环体内定义大型变量效率的研究
  6. IOS图标icon,png去掉高光效果
  7. 【推荐实践】深度学习在阿里B2B电商推荐系统中的实践
  8. python怎样下载numpy_python下载numpy的方法是什么
  9. 电气、电子电路符号与表示方法
  10. 仿ios相机apk_仿苹果相机APP下载
  11. 郑中基 英雄寞 08版射雕英雄传片头曲 LRC歌词
  12. 屏幕录像软件有哪些?操作简单的屏幕录像方法推荐
  13. Dilated Convolutions——扩张卷积
  14. 信号的基本概念及分类
  15. AI 智能修复老照片,效果惊艳到我了!| 附代码
  16. AcWing-算法提高课【合集】
  17. 从匿名聊聊被封停,看微信小程序坚持的线下策略
  18. 单片机节日彩灯实训报告_单片机数字钟实训报告
  19. Android 导航栏虚拟按键
  20. 抖音0播放至10万播放的正确方式,新号如何不投DOU+也能冷启动?

热门文章

  1. 《红色警戒3》新单位详细介绍:忍者
  2. Python菜鸟之python入门
  3. BAT网页10年巨变,背后的前端技术你都知道吗?
  4. 大寨鸿蒙系统的电器,华为传来两个好消息,鸿蒙OS大时代将于6月2日正式开启...
  5. The Innovation | 中国开启肿瘤CAR-T治疗新时代
  6. 多序列比对软件Jalview的安装及使用体验
  7. FCPX无缝扭曲过渡转场Twirl Transition Pack for Mac
  8. springboot使用mybatis_使用springboot+mybatis数据库存储服务化
  9. c语言第六章条件型循环结构,C语言课件(第六章 循环结构)
  10. Vue第二部分(1):组件基础学习