Appearance
订单表使用数据库自增 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 构造是时间戳 + 计数器