白血病能治好吗-亚搏网页登录-亚搏网页登陆

大局仅有的大局ID生成计划有许多种,比方UUID、雪花算法,还有运用redis的等等,今日首要介绍运用数据库生成的计划,也是咱们一直在运用的计划。

首要思路:

在白血病能治好吗-亚搏网页登录-亚搏网页登陆数据库中树立一个表,表结构如下:

这儿的规划是每个表都会有一个sequence的生成器,每个生成器的起始值都是能够恣意指定的。

table_name对应体系中xml的bean的id,后续的许多查询和更新都是依据这个字段来的。

column_name首要是起跳值,即第一个id的值。

这个模白血病能治好吗-亚搏网页登录-亚搏网页登陆式是客户端的形式,即在jvm内部去生成的ID,可是这个又能够确保白血病能治好吗-亚搏网页登录-亚搏网页登陆这个ID在每个表里是仅有的,不会重复的,下面会介绍详细的做法。

1)在生成器内部定一个步长,每次生成新的ID时会在本来的值上加上步长。

2)运用lock确保线程安全

3)怎么确保高并发,在体系启动时进行初始标签17化每个seq生成器,都会从数据库里获取当时最新的标签11值,多个体系在一起获取时怎么确保每个client获取到的值是不同的呢?一个思路是运用CAS,在获取当时的值之前先查询,运用gmt_mo白血病能治好吗-亚搏网页登录-亚搏网页登陆dified和column_name作为更新条件,新值为旧值+(5000),假如更新失利则进行重试,直到成功停止白血病能治好吗-亚搏网页登录-亚搏网页登陆。当步长运用完后,在从头获取起跳值即可。运用步长,相当于在本地生成,不会对数据库形成太大的压力。

4)运用AtomicLong来确保生成ID的原子性

5)运用volatile确保线程可见

这便是咱们运用数据库生成ID的思路,且能够确保大局的仅有性。这个计划其实是参阅了阿里TDDL的计划。咱们在出产跑了几年了,暂时还没有遇到什么问题。咱们的计划也白血病能治好吗-亚搏网页登录-亚搏网页登陆不是最优的标签14,还有许多优白血病能治好吗-亚搏网页登录-亚搏网页登陆化的空间,欢迎来评论。

代码这儿就不先放出来了,有爱好的小伙伴能够私聊找我要,后边我再稍作润饰放到github上来。

Write a Comment

电子邮件地址不会被公开。 必填项已用 *标注