全局ID生成策略

全局ID的实现方式

  • UUID,32个字符, 4个横线

    8 - 4-4-4- 12

    UUID.randomUUID.toString();

    • 基于时间的UUID(time & MAC)
    • UUID(time&POSIX UID或GID)
    • 随机数的UUID
    • UUID(SHA1)
  • 数据库

create table sequence(
   id int auto_increment
   b_id int unique_key
);
begin
   replace into sequence(b_id) values();
   select LAST_INSERT_ID();
commit;
  • Redis、mongdb
    increBy / incr
    ObjectId

全局ID的要求

  • 全局唯一性
  • 有序的递增性
  • 高可用性
  • 时间上的特性
-1l ^ (-1l << sequenceBits)
                 00000000 00000000 00000000 00000001
                 取反+1
                 11111111 11111111 11111111 11111111
   11111111 1111 11111111 11111111 11110000 00000000 (-1l << sequenceBits)
                 11111111 11111111 11111111 11111111
                 00000000 00000000 00001111 11111111
                 4095

雪花算法

Leaf-segment

Leaf-snowflake

UIDGenerator

  • snowflake算法(改造版本)
posted @ 2020-12-15 20:41  snail灬  阅读(126)  评论(0编辑  收藏  举报