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

场景介绍

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

什么是雪花算法

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

这种算法的性能相当高,每秒中能生成数百万的自增ID。因此,雪花算法被广泛应用于分布式系统中需要唯一ID的场景。例如,美团开源的分布式ID生成器Leaf也采用了雪花算法来保证全局唯一和趋势递增。
在这里插入图片描述

代码实现

我这边演示是通过插件注入的方式进行对 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" # stringmachineID: 1 # int64

plugin/工程目录添加config
在这里插入图片描述

// 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 utilsimport ("errors"sf "github.com/bwmarrin/snowflake""time"
)var node *sf.Node// SnowflakeInit 初始化
func SnowflakeInit(startTime string, machineID int64) (err error) {var start_time time.Timestart_time, err = time.Parse("2006-01-02", startTime)if err != nil {return errors.New("生成 id 失败")}sf.Epoch = start_time.UnixNano() / 1000000node, err = sf.NewNode(machineID)return
}// GenID 生成雪花 id
func GenID() int64 {return node.Generate().Int64()
}

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

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

结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/628692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GAMES104-现代游戏引擎:从入门到实践 - 物理引擎课程笔记汇总

文章目录 0 入门资料1 物理引擎基本概念Actor & shapesRigid body dynamicsCollision DetectionCollision Resolution 应用与实践Character controllerRagdoll 0 入门资料 GAMES104-现代游戏引擎:从入门到实践_课程视频_bilibiliGAMES104官方账号 - 知乎课程主页…

微服务实战项目_天机学堂01_初识项目

文章目录 一.项目简述二.Jenkins三.模拟真实业务:紧急bug修复和代码阅读 一.项目简述 Q:天机学堂是什么? A:天机学堂是一个基于微服务架构的生产级在线教育项目 主要有两个端(项目已上线,可以点击查看): 管理后台: https://tjxt-admin.itheima.net 其核心业务主体包括老师、…

QT上位机开发(dock窗口在软件布局中的应用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 在软件开发中,一般有主窗口和子窗口之分。主窗口也就是main window,是最重要的操作界面。子窗口就是各种属性配置、参数配置…

NOIP2018提高组day2 - T1:旅行

题目链接 [NOIP2018 提高组] 旅行 题目描述 小 Y 是一个爱好旅行的 OIer。她来到 X 国,打算将各个城市都玩一遍。 小 Y 了解到,X 国的 n n n 个城市之间有 m m m 条双向道路。每条双向道路连接两个城市。 不存在两条连接同一对城市的道路&#xff…

uniapp使用安装sass

1.首先你要安装node-sass npm install node-sass --save-dev2.安装sass-loader npm install sass-loader --save-dev3.修改style标签&#xff0c;声明使用sass <style lang"scss" scoped>

做完十年数据分析后的思考与总结

种一棵树最好的时间是十年前&#xff0c;其次是现在。十年了&#xff0c;本次分享大多来自工作中的日常所思所想&#xff0c;欢迎自取。 01 数据分析的本质 数据是基础&#xff0c;分析才是重点。 行业内有专门的统计岗&#xff0c;就是只负责做好数据统计就可以了&#xff0…

【Python】PyCharm设置控制台输出的行数限制

在使用PyCharm的时候&#xff0c;如果在控制台输出的信息过多室&#xff0c;控制台仅会保留一部分的输出信息。想要改变这个限制&#xff0c;设置方法如下&#xff1a; 进入到PyCharm的安装目录下&#xff0c;我的是C:\Develop\PyCharm202303\PyCharm 2023.3进入bin找到文件id…

sqlite | c++ | demo

sqlite 过得的废话 就不细说了 接下来&#xff0c;主要讲 安装sqlite 然后写一个demo &#xff0c;然后再shell 命令操作sqlite #安装 sqlite 程序 以及开发包 我的linux 环境是centos sudo yum install sqlite-3.7.17-8.el7_7.1.x86_64 sqlite-devel#输入 sqlite3 测试是否安装…

django后台登录:Forbidden (403) CSRF verification failed. Request aborted.

如果您在尝试登录Django后台时遇到了CSRF验证失败的错误&#xff0c;这通常意味着您的浏览器未能提交正确的CSRF令牌&#xff0c;或者Django后端未能验证该令牌。遵循以下步骤来解决这个问题&#xff1a; 清除浏览器Cookies和缓存&#xff1a; 有时候&#xff0c;浏览器的Cooki…

Linux systemd的概述与发展历程

systemd是一个系统和服务管理器&#xff0c;广泛用于现代Linux系统。它的设计目标是取代传统的SysVinit作为Linux系统的初始化系统&#xff0c;提供更快的启动速度、更好的并行性和更多的功能。本文将对systemd进行概述&#xff0c;并探讨其发展历程。 初始化系统 systemd负责…

C++:运算符重载

运算符重载的基本概念 与函数重载相似&#xff0c;运算符也存在重载问题。C为了解决一些实际问题&#xff0c;允许重载现有的大多数运算符&#xff0c;即允许给已有的运算符赋予新的含义&#xff0c;从而提高C的可扩展性&#xff0c;针对同样的操作&#xff0c;使用重载运算符…

【PostgreSQL】函数与操作符-位串函数和操作符

PostgreSQL函数与操作符-位串函数和操作符 PostgreSQL函数与操作符-位串函数和操作符描述用于检查和操作位串的函数和操作符&#xff0c;也就是操作类型为bit和bit varying的值的函数和操作符。除了常用的比较操作符之外&#xff0c;还可以使用下表里显示的操作符。&、|和…

ssh -T git@github.com Connection timed out 解决方案-自测有效

ssh -T gitgithub.com Connection timed out 解决方案-自测有效 $ ssh -T gitgithub.com $ ssh -vT gitgithub.com -p 443 OpenSSH_9.5p1, OpenSSL 3.1.4 24 Oct 2023 debug1: Reading configuration data /c/Users/Administrator/.ssh/config debug1: /c/Users/Administrator…

群晖NAS上安装部署开源工作流自动化工具n8n

一、开源工作流自动化工具n8n简介 n8n是它是一个与其他应用集成的应用程序&#xff0c;目标是自动化各应用之间的流程;利用 n8n 你可以方便地实现当 A 条件发生&#xff0c;触发 B 服务这样的自动工作流程。 n8n优点是&#xff1a;代码开源、可以自托管、下载安装方便、易于使用…

Java毕业设计第90期-基于springboot的学习英语管理系统

获取源码资料&#xff0c;请移步从戎源码网&#xff1a;从戎源码网_专业的计算机毕业设计网站 项目介绍 基于springboot的学习英语管理系统&#xff1a;前端 thymeleaf、jquery&#xff0c;后端 maven、springmvc、spring、mybatis&#xff0c;角色分为管理员、用户&#xff…

Java初学者软件安装与idea快捷键

一.Java初学者软件安装 视频教程&#xff1a; 最通俗易懂的JDK、IDEA的安装使用权威指南_哔哩哔哩_bilibili 文档教程&#xff1a; Java 开发环境配置 | 菜鸟教程 (runoob.com) 二.java的快捷方式与插件 快捷键&#xff1a; 史上最全的IDEA快捷键总结_idea的快捷语法_扬帆…

VSCode使用技巧

选择python 解释器 使用快捷键CtrlShiftP Python: Select Interpreter快捷键 返回上一次光标的位置 重新设置一下 navigate

【LLM】Prompt微调

Prompt 在机器学习中&#xff0c;Prompt通常指的是一种生成模型的输入方式。生成模型可以接收一个Prompt作为输入&#xff0c;并生成与该输入相对应的输出。Prompt可以是一段文本、一个问题或者一个片段&#xff0c;用于指导生成模型生成相应的响应、续写文本等。 Prompt优化…

springboot(ssm二手手机交易平台 二手机商城系统Java系统

springboot(ssm二手手机交易平台 二手机商城系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; …

ROS第 2 课 ROS 系统安装和环境搭建

文章目录 方法一&#xff1a;一键安装&#xff08;推荐&#xff09;方法二&#xff1a;逐步安装&#xff08;常规安装方式&#xff09;1.版本选择2.检查 Ubuntu 的软件和更新源3.设置 ROS 的下载源3.1 设置国内下载源3.2 设置公匙3.3 更新软件包 4. 安装 ROS5. 设置环境变量6. …