Python代码示例:Twitter的Snowflake雪花算法代码示例
以下是一个简化的示例代码,演示了如何实现Twitter的Snowflake算法:
import time
class Snowflake:
def __init__(self, worker_id, datacenter_id, sequence=0):
self.worker_id = worker_id
self.datacenter_id = datacenter_id
self.sequence = sequence
self.last_timestamp = -1
def generate_id(self):
timestamp = self._get_timestamp()
if timestamp < self.last_timestamp:
raise Exception("Invalid system clock!")
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
return (
(timestamp << 22)
| (self.datacenter_id << 17)
| (self.worker_id << 12)
| self.sequence
)
def _get_timestamp(self):
return int(time.time() * 1000)
def _wait_next_millis(self, last_timestamp):
timestamp = self._get_timestamp()
while timestamp <= last_timestamp:
timestamp = self._get_timestamp()
return timestamp
使用示例:
# 创建Snowflake实例,传入worker_id和datacenter_id
snowflake = Snowflake(worker_id=1, datacenter_id=1)
# 生成唯一ID
unique_id = snowflake.generate_id()
print(unique_id)
在实际使用中,需要根据具体的业务需求进行适当的调整和扩展,例如添加数据中心ID和工作节点ID的位数,调整时钟回拨的处理逻辑等。此示例代码仅为演示Snowflake算法的基本原理,并不包含完整的错误处理和容错机制。
还没有评论,来说两句吧...