雪花算法¶
雪花算法是由 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();
}
}