文章插图
前言我们在进行平台账号体系设计的时候,遇到这么一个需求:在平台注册的用户ID以n位的数字展现 。
乍一看,这个需求很简单,就一句话 。但仔细思考后,发现这里面还是有很多地方需要思考的:
- 用户ID是随机生成还是顺序自增?
- 如果是随机生成的:
- 如何保证每次生成的ID都是唯一的?
- 如果是顺序自增的:
- 是不是会泄露平台用户规模,增加安全隐患?
- 如何保证分布式高并发下的ID顺序自增?
- 如果用户数量达到n位数上限后,如何自动扩展ID?
那么,用户ID随机生成,如何保证每次都是一个唯一值呢?这里有两个思路:
- 设计一种算法,通过数学运算,以一定的入参,得到一个一一映射的出参,该出参的范围在n为数字的大小范围内 。数学表达式为:
y = f(x_0,x_1,...,x_m,n)
其中,m=入参个数,由m个入参确定唯一性,n=y的范围大小 。
- 借助于工程思想,利用各种中间件实现该需求 。如借助与MySQL+Redis 。
这里主要展开下使用工程思想,借助MySQL+Redis+定时器的实现方式 。
在MySQL里创建一张表t_user_id_pool, 该表中放入所有符合条件的用户id,如000000-999999 。
【如何设计百万级的用户ID 百万级用户 架构实现】设计定时器逻辑为:每隔1小时,去redis中读取key为id_pool的键,
- 如果id_pool不存在,则随机地从数据库中读取1000个用户id,以队列的形式存入redis的id_pool里;
- 如果id_pool存在但队列里id数量小于等于200时,从数据库随机获取1000个用户id,push到redis的id_pool里 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- 如何使用GoldWave剪裁音乐制作个性铃声
- 如何在Photoshop中清除文档中所选画板参考线
- 如何在WPS文档中插入折线图
- 如何打造一个整洁有序的电脑桌面
- 如何下载和安装方正仿宋简体字体
- 如何批量在Excel中添加标题
- 如何在WORD文档中插入多行多列的表格
- 如何在WPS文字中加入一个对话框
- 如何在PS中制作更生动的光线投射效果
- 如何在Win7中建立WiFi热点,让手机共享上网