实现方式
分布式ID组成:时间 + 随机串 + 自增序号。例如 20221001-891273198237-001
。
假设时间就是年月日。
当获取一个随机串时,要将时间和随机串存入数据库中,用下面的方式保证时间和随机串是唯一的:
数据库中时间和随机串加联合唯一索引。如果数据库中已存在,则会出现唯一索引冲突报错。此时重新生成随机串,重试即可。
自增序号,在内存中自增即可。
当自增序号用完后,再重新生成随机串。
如果希望额外再保证唯一性,可以将生成的分布式ID写入一个表中,如果出现唯一索引冲突,就意味着用过了,重新生成下。
可能的问题
在跨天时,如何处理?
比如当前的时间和随机串,自增序号还没用完,但是用着用着发现突然跨天了,此时应该用新的时间,并重新生成随机串,自增序号重新从0开始。