一. 开源算法Snowflake生成分布式id
1. 原因: 数据量庞大 ->分库分表 -> 数据库多实例部署 -> 唯一的全局ID
2. UUID: universe unique ID -> 32位长度字符串
(1) 缺点: 无排序, 无递增; 字符串存储查询效率低; 存储量大; 传输数据量大; 不可读
3. Redis:
(1) 单线程特点 -> 原子性 -> INCR / INCRBY
(2) 优点: 不依赖数据库, 性能优于数据库; 天然排序
(3) 缺点: 引入Redis组件增加系统复杂度; 编码和配置工作量大; 网络传输性能下降
4. Snowflake: Twitter开源算法
(1) Long型ID, 本机算法生成ID, 可排序
(2) 组成: 64位(1位不用+41位毫秒时间戳+10位手动机器ID+12位序列号)
(3) 工具类IdWorker: 放到公共模块changgou_common/util
(4)测试: long id = new IdWorker(workerId, DatacenterId).nextId();
(5)使用步骤:
1) application.yml中配置: workerId: 0 ; datacenterId: 0
2) 启动类注入: @Bean IdWorker(){}
3) 取值: @Value("${workerId}")
二. SPU & SKU
1. SPU: standard product unit 商品信息集合最小单位 -> 例: 京东商品详情页, 多个属性规格