跳转至

雪花算法

雪花算法是由 Twitter 开源的一种分布式 ID 生成算法,用于在分布式系统中生成唯一、有序、高并发的 ID。其核心思想是通过将一个 64 位的长整型数字拆分为多个部分,组合不同维度的信息(如时间戳、机器标识、序列号等),从而保证 ID 的唯一性和有序性。

这里主要是使用雪花算法生成唯一id和一个比较重要的字段account_no,因为上篇文章中提到,系统中设计的是分库分表,不同的表中的数据的id需要保证唯一性。雪花算法是根据时间戳、机器 ID、序列号的组合确保全局唯一,无冲突风险,符合我们的场景。account_no是因为整个设计中所有的分库分表都是以这个字段为依据的,将相同账号下的相关数据放到固定的库和表中,在操作数据时会比较方便。

针对主键id:sharding-jdbc配置中可直接指定生成id字段的规则

     KeyGeneratorConfiguration keyGeneratorConfiguration = new KeyGeneratorConfiguration(
                "SNOWFLAKE",  // 内置雪花算法类型生成id
                "id",         // 主键字段名
                properties    // 配置属性
        );

在生成账号时,调用一下对应的方法即可

// 生成唯一的账号
accountDO.setAccountNo(IdUtil.generateSnowFlakeKey().toString());

public class IdUtil {

    private static SnowflakeShardingKeyGenerator snowflakeShardingKeyGenerator = new SnowflakeShardingKeyGenerator();

    // 雪花算法生成器
    public static Comparable generateSnowFlakeKey(){
        return snowflakeShardingKeyGenerator.generateKey();
    }

}