zoukankan      html  css  js  c++  java
  • javascript雪花算法ID生成库simple-flakeid

    开源地址:https://github.com/zhupengfeivip/simple-flakeId

    核心算法版权属于 yitter](https://github.com/yitter))
    项目更多介绍参照:https://github.com/yitter/idgenerator
    本项目是在此库优化而来,遵循开源原则,完全开源。

    install

    npm i simple-flakeid
    

    function

    function NextId()

    根据输出数值判断,小于number最大值时输出number类型,大于时输出bigint

    function NextNumber()

    始终输出number类型,超过时throw error

    function NextBigId()

    始终输出bigint类型

    js demo

    const snowId = require('simple-flakeid')
    let gen1 = new snowId.SnowflakeIdv1({ workerId: 1 })
    for (let i = 0; i < 10; i++) {
        let id1 = gen1.NextId()
        console.log(`${i} ID:${id1} ${typeof id1} length:${id1.toString().length}`)
    }
    

    output:

    $ node js/demo1.js 
    0 ID:235100305752133 number length:15
    1 ID:235100305772613 number length:15
    2 ID:235100305776709 number length:15
    3 ID:235100305776710 number length:15
    4 ID:235100305776711 number length:15
    5 ID:235100305776712 number length:15
    6 ID:235100305776713 number length:15
    7 ID:235100305780805 number length:15
    8 ID:235100305780806 number length:15
    9 ID:235100305780807 number length:15
    
    const snowId = require('simple-flakeid')
    let gen1 = new snowId.SnowflakeIdv1({ workerId: 1 })
    for (let i = 0; i < 10; i++) {
        let id1 = gen1.NextBigId()
        console.log(`${i} ID:${id1} ${typeof id1} length:${id1.toString().length}`)
    }
    

    output:

    $ node js/demo2.js
    0 ID:235104756604997 bigint length:15
    1 ID:235104756629573 bigint length:15
    2 ID:235104756629574 bigint length:15
    3 ID:235104756629575 bigint length:15
    4 ID:235104756629576 bigint length:15
    5 ID:235104756629577 bigint length:15
    6 ID:235104756633669 bigint length:15
    7 ID:235104756633670 bigint length:15
    8 ID:235104756633671 bigint length:15
    9 ID:235104756633672 bigint length:15
    

    ts demo

    import { SnowflakeIdv1 } from "../index"
    
    let gen1 = new SnowflakeIdv1({ workerId: 1 })
    for (let i = 0; i < 10; i++) {
        let id1 = gen1.NextId()
        console.log(`${i} ID:${id1} ${typeof id1} length:${id1.toString().length}`)
    }
    

    output:

    $ ts-node ts/demo1.ts 
    0 ID:235099434217541 number length:15
    1 ID:235099434225733 number length:15
    2 ID:235099434225734 number length:15
    3 ID:235099434225735 number length:15
    4 ID:235099434225736 number length:15
    5 ID:235099434229829 number length:15
    6 ID:235099434229830 number length:15
    7 ID:235099434229831 number length:15
    8 ID:235099434229832 number length:15
    9 ID:235099434233925 number length:15
    

    更多示例代码:https://github.com/zhupengfeivip/simple-flakeId-demo.git
    包含在API中如何处理bigint的长度问题,请看示例代码

    其他帮助

    在mysql中int类型最大长度是10位数字,由于本算法默认生成的是15位,最短也是11位,所以在mysql中需要使用bigint数据类型

    作者:朱鹏飞 加我个人微信(zhupengfeivip)进入郑州IT微信交流群
    个人博客:https://www.cnblogs.com/zhupengfei/
    image.png
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
    3.Python连接数据库PyMySQL
    2.Python输入pip命令出现Unknown or unsupported command 'install'问题解决
    2.Linux下安装Jenkins
    5.JMeter测试mysql数据库
    Android 4学习(7):用户界面
    Android 4学习(6):概述
    Android 4学习(5):概述
    Android 4学习(4):概述
    Android 4学习(3):概述
  • 原文地址:https://www.cnblogs.com/zhupengfei/p/simple-flakeid.html
Copyright © 2011-2022 走看看