/**
*
* 获取系统运行期间,永远增长时间搓,可以使用年限146.
* 每次重新启动运行后,都从0开始,能够保证在运行期间,一直自增,不受系统时间被回拨(回退,前进)的影响。
* 使用场景举例:
* 有人提了雪花算法如何保证服务器时间回拨了还保证生成的id递增的问题,其实想想也很简单。
* 1、系统基准时间商定: 系统在初始化生成器时,寻找初始化基准时间,先去已经启动的其它任何一个节点获取它们当前记录的时间搓,若没有启动的节点,那么取数据库中当前最大ID进行分析提取,提取得到的时间搓和数据库当前时间搓比较去最大值。
* 2、基准时间获取后,在通过基准时间与{@link #currentTimeMillis()}的和得到算法的时间位。
* 后续依然采用现在的算法,只是时间位使用基准时间搓与jvm运行时间的结合。
* 保证算法时间位不依赖本地时间,不怕服务器时间的调整。
* 大家公用一样的方式获取时间搓,保证大家要错一起错,至少保证所有节点的递增性
*
* @author pdy
*
*/
public class SelfTime {
/**
* 一秒对应多少纳秒
*/
private final static long SECOND_NANO
雪花算法不受服务器时间的影响解决方案
最新推荐文章于 2025-04-25 14:00:25 发布
该博客介绍了一种自增时间搓算法,确保在系统时间被回拨时仍能保持递增性。算法在初始化时确定基准时间,并结合JVM运行时间生成时间位,从而在所有节点上保持一致性。这种方法适用于分布式系统中生成唯一ID的需求。

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



