以下是使用雪花算法生成不重复十一位的 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录