是否有好的措施在高并发、多任务情况下,防止自带的雪花ID算法出现生成重复? 返回

SqlSugar 沟通中
15 817

我们最近出现了好多次,在高并发场景下,用自带的雪花ID方法偶尔会出现重复的情况。尤其是在处理系统间的数据同步时,多任务、多线程情况下。想问下老师,有没有好的措施?

热忱回答15

  • 历历 历历 VIP0
    2025/12/22

    有时一分钟需要生成一万-三万个,有时一天会产生好几次重复的ID。 我们是用SnowFlakeSingle.Instance.NextId()来获取。

    0 回复
  • 历历 历历 VIP0
    2025/12/22

    能否在SnowFlakeSingle的生产算法中,强制Sleep(1) ? 

    0 回复
  • 历历 历历 VIP0
    2025/12/22

    image.png

    我看源码中使用了 lock,搞不懂为什么会出现重复,且只有一个站点,还不是多站点。

    0 回复
  • fate sta fate sta VIP0
    2025/12/22

    雪花ID重复是没有设置workid,每台机器或者每个应用都要设置不同的workid,并且程序启动后workdid不能修改

    0 回复
  • fate sta fate sta VIP0
    2025/12/22

    或者机器时间回调。

    0 回复
  • fate sta fate sta VIP0
    2025/12/22

    文档:雪花ID有介绍

    0 回复
  • 历历 历历 VIP0
    2025/12/22

    有的,专门 在 appsettings 中有配置 WorkId,但就一个站点。 时间没有回退。 我感觉会不会是系统卡顿造成的?因为场景是系统数据同步。

    0 回复
  • fate sta fate sta VIP0
    2025/12/22

    本地和服务器都连一个库也要区公workid

    0 回复
  • 历历 历历 VIP0
    2025/12/22

    系统是单站点,数据进入站点后 重新生成的ID。是B/S的 老师,不是客户端服务端程序。系统是接收数据后,重新生成ID 。

    现在不止多任务用同一个方法插入有重复, 不同类型的单据保存方法,也存在重复问题。

    所以我猜会不会是系统卡顿并发产生的。

    0 回复
  • fate sta fate sta VIP0
    2025/12/22

    正确使用雪花ID不存重复的情况

     


    0 回复
  • fate sta fate sta VIP0
    2025/12/22

    认真按文档排查,当然你非要认为是算法问题,你也可以重写雪花ID算法。

    文档:雪花ID

    0 回复
  • fate sta fate sta VIP0
    2025/12/22

    另外前端要序列化成string。不然精度会丢失。

    0 回复
  • 历历 历历 VIP0
    2025/12/22

    @fate sta:数据库直接用的 char(19)类型

    0 回复
  • 历历 历历 VIP0
    2025/12/22

    是在单站点生成的ID,应该不是因为workid 老师,出现重复的时候 也换过 workid ,包括在系统program中写死一个数字。现在一直解决不了。

    0 回复
  • fate sta fate sta VIP0
    2025/12/22

    认真按文档排查,目前雪花ID算法没有问题的3年来没一例出现问题,用户写独立DEMO测试后都是自个问题,当然你非要认为是算法问题,你也可以重写雪花ID算法。

    文档:雪花ID


    0 回复