使用雪花算法生成不重复十一位
以下是使用雪花算法生成不重复十一位的 Python 代码示例:
import time
class SnowflakeIdGenerator:
def __init__(self, worker_id):
self.worker_id = worker_id
self.sequence = 0
self.last_timestamp = -1
def generate_id(self):
timestamp = int(time.time() * 1000)
if timestamp < self.last_timestamp:
raise Exception('Clock moved backwards!')
if timestamp == self.last_timestamp:
self.sequence = (self.sequence + 1) & 4095
if self.sequence == 0:
timestamp = self.wait_next_millis(self.last_timestamp)
else:
self.sequence = 0
self.last_timestamp = timestamp
id = ((timestamp - 1288834974657) << 22) | (self.worker_id << 12) | self.sequence
return id
def wait_next_millis(self, last_timestamp):
timestamp = int(time.time() * 1000)
while timestamp <= last_timestamp:
timestamp = int(time.time() * 1000)
return timestamp
if __name__ == '__main__':
id_generator = SnowflakeIdGenerator(1) # 设置 worker_id
ids = set()
for i in range(100000):
id = id_generator.generate_id()
if id in ids:
print('Duplicate ID: {}'.format(id))
else:
ids.add(id)
print('Generated ID: {}'.format(id))
在上述代码中,SnowflakeIdGenerator 类使用雪花算法生成唯一的十一位 ID,其中 worker_id 是一个自定义的标识符,用于区分不同的生成器。在主程序中,我们使用该生成器生成 100000 个 ID,并检查是否存在重复
原文地址: https://www.cveoy.top/t/topic/eNkC 著作权归作者所有。请勿转载和采集!