gin-vue-admin二开使用雪花算法生成唯一标识 id

这篇具有很好参考价值的文章主要介绍了gin-vue-admin二开使用雪花算法生成唯一标识 id。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景介绍

需求场景: 总部采集分支的数据,由于分支的 id 是子增的主键 id,所以会出现重复的 id,但是这个 id 需要作为标识,没有实际作用,这里选择的是分布式 id 雪花算法生成 id 存储用来标识,这个项目基于 gva 进行开发的,可以使用 sonyflake snowflake 两个实现方式都可以解决这个问题,这里选择 snowflake 进行设计

什么是雪花算法

雪花算法,由Twitter开源,是一种分布式唯一ID生成算法。这种算法的主要特点是简单、高效,生成的64位整数ID全局唯一,且趋势递增。在单机上,雪花算法生成的ID也能保持递增特性,但在不同的机器上,由于各自有不同的时间戳,因此生成的ID不会冲突。

这种算法的性能相当高,每秒中能生成数百万的自增ID。因此,雪花算法被广泛应用于分布式系统中需要唯一ID的场景。例如,美团开源的分布式ID生成器Leaf也采用了雪花算法来保证全局唯一和趋势递增。
gin-vue-admin二开使用雪花算法生成唯一标识 id,gin,vue.js,算法

代码实现

我这边演示是通过插件注入的方式进行对 gva 进行二开,在 gva 后端模块的 server/plugin 中创建一个新的业务目录,里面创建一个 utils 工具文件夹,然后创建一个名字为 snowflake.go 文件,并且在 server 的全局 config.yaml文件配置一个 snowflake,在 main.go 主函数进行初始化以后就可以生成对应的雪花 id 了

拉取 snowflake

go get github.com/bwmarrin/snowflake

config.yaml 添加下面内容

snowflake:
  start-time: "2024-01-01" # string
  machineID: 1 # int64

plugin/工程目录添加config
gin-vue-admin二开使用雪花算法生成唯一标识 id,gin,vue.js,算法

// Snowflake 雪花机器结构体
type Snowflake struct {
	StartTime string `mapstructure:"start-time" json:"start-time" yaml:"start-time"`
	MachineID int64  `mapstructure:"machineID" json:"machineID" yaml:"machineID"`
}

全局config/config.go 中绑定注入这个 Snowflake 结构体

type Server struct {
	
	..........
	
	// 雪花
	Snowflake config.Snowflake `mapstructure:"snowflake" json:"snowflake" yaml:"snowflake"`
}

plugin/项目目录 创建 utils/snowflake.go

package utils

import (
	"errors"
	sf "github.com/bwmarrin/snowflake"
	"time"
)

var node *sf.Node

// SnowflakeInit 初始化
func SnowflakeInit(startTime string, machineID int64) (err error) {
	var start_time time.Time
	start_time, err = time.Parse("2006-01-02", startTime)
	if err != nil {
		return errors.New("生成 id 失败")
	}
	sf.Epoch = start_time.UnixNano() / 1000000
	node, err = sf.NewNode(machineID)
	return
}

// GenID 生成雪花 id
func GenID() int64 {
	return node.Generate().Int64()
}

主函数 main.go 初始化这个值

func main() {
	.....
	// 初始化雪花算法方法 SnowflakeInit
	if err := utils.SnowflakeInit(global.GVA_CONFIG.Snowflake.StartTime, global.GVA_CONFIG.Snowflake.MachineID); err != nil {
		fmt.Println("初始化雪花算法失败", err)
		return
	}
	fmt.Println("测试 id", utils.GenID())
}

结果
gin-vue-admin二开使用雪花算法生成唯一标识 id,gin,vue.js,算法文章来源地址https://www.toymoban.com/news/detail-798395.html

到了这里,关于gin-vue-admin二开使用雪花算法生成唯一标识 id的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 拆解雪花算法生成规则

    雪花算法(Snowflake)是一种生成分布式全局唯一ID的算法,生成的ID称为Snowflake IDs或snowflakes。这种算法由Twitter创建,并用于推文的ID。目前仓储平台生成ID是用的雪花算法修改后的版本。 雪花算法几个特性 生成的ID分布式唯一和按照时间递增有序,毫秒数在高位,自增序列在

    2024年02月16日
    浏览(29)
  • 分布式ID生成算法——雪花算法

    一、分布式ID ID可以唯一标识一条记录。 对于单体架构,我们可以使用自增ID来保证ID的唯一性。但是,在分布式系统中,简单的使用自增ID就会导致ID冲突。这也就引出了 分布式ID 问题。分布式ID也要求满足分布式系统的 高性能、高可用、高并发 的特点。 二、雪花算法 世界

    2024年02月06日
    浏览(33)
  • 分布式ID生成算法:雪花算法

    雪花算法(Snowflake)是一种分布式ID生成算法,可以生成唯一的、有序的、不重复的ID号,广泛应用于分布式系统中。其生成的ID号由64位二进制数组成,可以转换成16进制或10进制的字符串表示。 雪花算法的核心思想是将一个64位的二进制数分成四部分,分别表示时间戳、数据

    2024年02月15日
    浏览(28)
  • 雪花算法生成唯一数字id

    2024年02月02日
    浏览(31)
  • 分布式—雪花算法生成ID

    由64个Bit(比特)位组成的long类型的数字 0 | 0000000000 0000000000 0000000000 000000000 | 00000 | 00000 | 000000000000 1个bit:符号位,始终为0。 41个bit:时间戳,精确到毫秒级别,可以使用69年。 10个bit:工作机器ID,可以部署在1024个节点上。 12个bit:序列号,每个节点每毫秒内最多可以生成

    2024年02月11日
    浏览(33)
  • 雪花算法ID生成器工具类

    可以通过配置bean添加到容器,注入使用

    2024年02月15日
    浏览(29)
  • 分布式唯一ID生成算法——雪花算法(SnowFlake)

    SnowFlake算法 据国家大气研究中心的查尔斯·奈特称,一般的雪花大约由10^19个水分子组成。在雪花形成过程中,会形成不同的结构分支,所以说大自然中不存在两片完全一样的雪花,每一片雪花都拥有自己漂亮独特的形状。 雪花算法表示生成的id如雪花般独一无二。 snowflake是

    2023年04月20日
    浏览(30)
  • 雪花算法生成分布式主键ID

    直接上代码,复制即可使用 在这个示例中,你可以通过 SnowflakeIdGenerator.init(dataCenterId, workerId); 初始化数据中心 ID 和工作 ID,然后通过 SnowflakeIdGenerator.generateId(); 静态方法生成 Snowflake ID 的字符串形式。

    2024年02月22日
    浏览(34)
  • 【Java笔记】分布式id生成-雪花算法

    随着业务的增长,有些表可能要占用很大的物理存储空间,为了解决该问题,后期使用数据库分片技术。将一个数据库进行拆分,通过数据库中间件连接。如果数据库中该表选用ID自增策略,则可能产生重复的ID,此时应该使用分布式ID生成策略来生成ID。 snowflake是Twitter开源的

    2024年02月11日
    浏览(30)
  • 分布式Id生成之雪花算法(SnowFlake)

    目录 前言 回顾二进制 二进制概念 运算法则 位(Bit) 字节(Byte) 字符 字符集 二进制原码、反码、补码 有符号数和无符号数 疑问:为什么不是-127 ~ 127 ? 为什么需要分布式全局唯一ID以及分布式ID得业务需求? ID生成规则部分硬性要求 ID生成系统的可用性要求 通用解决方

    2024年02月11日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包