Skip to content

订单表使用数据库自增 ID 存在的问题:

  • ID 规律太明显,容易暴露一些信息。

  • 受表单数据量的限制,MySQL 分表后每张表的自增 ID 都从 1 开始,会出现重复 ID。

全局 ID 生成器

全局 ID 生成器,是一种在分布式系统下用来生成全局唯一 ID 的工具,一般要满足下列特性:

  • 唯一性

  • 高可用

  • 高性能

  • 递增性

  • 安全性

为了增加 ID 的安全性,可以不直接使用 Redis 自增的数值,而是拼接一些其他信息:

符号位(1 bit,永远为 0) + 时间戳(31 bit,以秒为单位,可以使用 69 年) + 序列号(32 bit,秒内的计数器,支持每秒产生 2 ^ 32 - 1个不同的 ID)

生成策略

  • UUID

    使用比较少,因为不满足递增性。

  • Redis 自增

  • snowflask 算法

  • 数据库自增

    单独用一个表记录所有 id

Redis 自增

  • 每天一个 key,方便订单统计。

  • ID 构造是时间戳 + 计数器