凯哥带你用python撸算法之雪花算法
import time
class Snow(object):
def __init__(self, idx=None):
init_date = time.strptime('2010-01-01 00:00:00', "%Y-%m-%d %H:%M:%S")
self.start = int(time.mktime(init_date))
self.last = int(time.time())
self.count_id = 0
self.idx = idx if idx else 0
def get(self):
now = int(time.time())
temp = now - self.start
if len(str(temp)) < 9:
length = len(str(temp))
s = '0' * (9 - length)
temp = s + str(temp)
if now == self.last:
self.count_id += 1
else:
self.count_id = 0
self.last = now
if len(str(self.idx)) < 2:
length = len(str(self.idx))
s = '0' * (2 - length)
self.idx = s + str(self.idx)
if self.count_id == 99999:
time.sleep(1)
count_id_data = str(self.count_id)
if len(count_id_data) < 5:
length = len(count_id_data)
s = '0' * (5 - length)
count_id_data = s + count_id_data
return ''.join([temp, self.idx, count_id_data])
if __name__ == '__main__':
import threading
snow = Snow('001')
def echo():
print(snow.get())
threads = [threading.Thread(target=echo) for i in range(100)]
for t in threads:
t.start()
for t in threads:
t.join()
凯哥带你用python撸算法之雪花算法的更多相关文章
- ID生成算法(一)——雪花算法
JavaScript生成有序GUID或者UUID,这时就想到了雪花算法. 原理介绍: snowFlake算法最终生成ID的结果为一个64bit大小的整数,结构如下图: 解释: 1bit.二进制中最高位 ...
- 分布式Snowflake雪花算法
前言 项目中主键ID生成方式比较多,但是哪种方式更能提高的我们的工作效率.项目质量.代码实用性以及健壮性呢,下面作了一下比较,目前雪花算法的优点还是很明显的. 优缺点比较 UUID(缺点:太长.没法排 ...
- 雪花算法生成ID
前言我们的数据库在设计时一般有两个ID,自增的id为主键,还有一个业务ID使用UUID生成.自增id在需要分表的情况下做为业务主键不太理想,所以我们增加了uuid作为业务ID,有了业务id仍然还存在自 ...
- 分布式ID生成 - 雪花算法
雪花算法是一种生成分布式全局唯一ID的经典算法,关于雪花算法的解读网上多如牛毛,大多抄来抄去,这里请参考耕耘的小象大神的博客ID生成器,Twitter的雪花算法(Java) 网上的教程一般存在两个问题 ...
- 全局唯一iD的生成 雪花算法详解及其他用法
一.介绍 雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等. 自增ID:对于数据敏感场景不宜使用,且不适合于分布式场景.GUID:采用无意义字符串,数据量增大时造成 ...
- 全局ID生成--雪花算法
分布式ID常见生成策略: 分布式ID生成策略常见的有如下几种: 数据库自增ID. UUID生成. Redis的原子自增方式. 数据库水平拆分,设置初始值和相同的自增步长. 批量申请自增ID. 雪花算法 ...
- 基于雪花算法生成分布式ID(Java版)
SnowFlake算法原理介绍 在分布式系统中会将一个业务的系统部署到多台服务器上,用户随机访问其中一台,而之所以引入分布式系统就是为了让整个系统能够承载更大的访问量.诸如订单号这些我们需要它是全局唯 ...
- 雪花算法生成分布式ID
分布式主键ID生成方案 分布式主键ID的生成方案有以下几种: 数据库自增主键 缺点: 导入旧数据时,可能会ID重复,导致导入失败 分布式架构,多个Mysql实例可能会导致ID重复 UUID 缺点: 占 ...
- Snowflake(雪花算法),什么情况下会冲突?
文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info 分布式系统中,有一些需要使用全局唯一 ID 的场景,这种时候为了防止 ID 冲突可以使用 36 位的 UUI ...
随机推荐
- Python异常类型及处理、自定义异常类型、断言
异常的概念.识别报错信息 异常处理 断言的基本使用 异常类型(异常就是报错) 常见异常 NameError:名称错误 SyntaxError:语法错误 TypeError:类型错误 错误回溯 查看报错 ...
- nginx搭建代理服务器与负载均衡器
一.代理服务器 服务 功能 配置语法 默认 配置位置 配置举例 结果验证 备注 代理服务 反向代理 proxy_pass URL location.if in location.limit_exc ...
- nginx常规扩展功能
功能 语法 配置位置 配置举例 结果验证 备注 文件读取 sendfile on|off ===>(提高读取静态文件效率.直接通过系统内核将文件放入socket,不必再打开一遍) http.se ...
- 【CSP-SJX 2019】T4 散步
Description 传送门 Solution 算法1 32pts 枚举每个时刻,并枚举所有发生的时间,暴力进行更新.发现最多只需要枚举到第 \(L\)个时刻,因为是一个环,所以最多到第L个时刻,所 ...
- layui的引用js踩坑
前言: 今天因为项目需要,需要使用layui,因为本身不多的前端经验,以为layui的用法和其他的前端框架,例如jquery,bootstrap等等,只需要直接引入layui.js,和layui.cs ...
- rabbit 发送者设置
@Override public void sendUploadOssAndRiskDanger(String uuid, Object objectData) { try { rabbitTempl ...
- 使用python做一个爬虫GUI程序
整体思路和之前的一篇博客爬虫豆瓣美女一致,这次加入了图片分类,同时利用tkinter模块做成GUI程序 效果如下: 整体代码如下: # -*- coding:utf-8 -*- import requ ...
- 使用Vue封装暂无数据占位图组件
1. 前言 在日常开发中,页面上肯定有展示数据的需求,但是当某些时候该展示数据的地方此时数据为空时,就会留下一片空白,对用户体验不是很好,那么接下来我们就封装一个空数据时的占位展示图,告诉用户此时用户 ...
- 表演的艺术,妖尾回合制战斗系统客户端设计[Unity]
妖尾历经几年开发,终于在今年6月底顺利上线,笔者从2017年初参与开发,主要负责妖尾战斗系统开发.战斗作为游戏的核心玩法系统,涉及很多技术点,希望能借几篇文字,系统性总结MMORPG战斗系统的开发经验 ...
- BFS(四):搜索状态判重
在采用广度优先算法进行搜索时,一个需要重点注意的是在搜索过程中判重和去重.前面介绍的几个例子中,判重都较简单,如采用vis[]数组,若vis[i]==0,则i未访问过,i入队列:若vis[i]!=0, ...