在分布式系统设计中,生成唯一编码是一个常见需求。本文将探讨从单机到高并发环境下的多种解决方案,帮助开发者根据业务场景选择合适的技术方案。

现有多种成熟的唯一编码生成方案可供选择,如UUID、雪花算法、美团Leaf、百度UidGenerator、滴滴Tinyid等。但当需要结合特定业务参数时,这些通用方案可能无法满足需求,此时就需要设计自定义的编码生成规则。
设计唯一编码时需要平衡多个关键因素:唯一性、有序性、性能、可用性与存储效率。主要有三种设计思路:
虽然分布式架构更常见,但单机方案是理解更复杂设计的基础。
完全在JVM进程内完成发号,不依赖外部中间件。通过时间戳位移保证宏观有序,结合PID与随机数区分进程,使用AtomicLong确保线程安全。
public final class UniqueIdUtils {
// 实现细节与原始内容一致
// 包含时间戳位移、进程特征处理、原子序列生成等方法
}
采用中心化强一致思路,利用Redis单线程特性实现原子递增。通过号段模式降低Redis访问频率,批量获取号段缓存在本地内存中。
public class RedisSegmentSequence {
// 包含Redis操作、本地号段管理等方法
// 实现细节与原始内容一致
}
结合实际业务需求,可采用业务码+时间戳+序列号的组合方式。通过Redis控制秒级序列号,过期自动重置。
public class SerialNumberGenerator {
// 包含Lua脚本实现原子操作
// 实现细节与原始内容一致
}
本文系统介绍了从单机到分布式环境下的唯一编码生成方案,每种方案都有其适用场景和权衡点。开发者可根据具体业务需求,选择最适合的技术实现路径。