id软件百度云下载(下载苹果id)

   百度SEO    

环境:sprinboot2.3.12.RELEASE + uid-generator1.0.0

UidGenerator是Java实现的, 基于Snowflake算法的唯一ID生成器。UidGenerator以组件形式工作在应用项目中, 支持自定义workerId位数和初始化策略, 从而适用于docker等虚拟化环境下实例自动重启、漂移等场景。 在实现上, UidGenerator通过借用未来时间来解决sequence天然存在的并发限制; 采用RingBuffer来缓存已生成的UID, 并行化UID的生产和消费, 同时对CacheLine补齐,避免了由RingBuffer带来的硬件级「伪共享」问题. 最终单机QPS可达 600万

依赖版本:Java8及以上版本, MySQL(内置WorkerID分配器, 启动阶段通过DB进行分配; 如自定义实现, 则DB非必选依赖)

Snowflake算法

Snowflake算法描述:指定机器 & 同一时刻 & 某一并发序列,是唯一的。据此可生成一个64 bits的唯一ID(long)。默认采用上图字节分配方式:

以上参数均可通过Spring进行自定义

CachedUidGenerator

RingBuffer环形数组,数组每个元素成为一个slot。RingBuffer容量,默认为Snowflake算法中sequence最大值,且为2^N。可通过 boostPower 配置进行扩容,以提高RingBuffer 读写吞吐量。

Tail指针、Cursor指针用于环形数组上读写slot:

CachedUidGenerator采用了双RingBuffer,Uid-RingBuffer用于存储Uid、Flag-RingBuffer用于存储Uid状态(是否可填充、是否可消费)

由于数组元素在内存中是连续分配的,可最大程度利用CPU cache以提升性能。但同时会带来「伪共享」FalseSharing问题,为此在Tail、Cursor指针、Flag-RingBuffer中采用了CacheLine 补齐方式。

RingBuffer填充时机

以上为百度的官方介绍,接下来我们将其整合到Springboot项目中

在下面地址下载uid-generator


创建表

将其项目中的mapper.xml文件copy到自己项目中,对应的WorkerNodeEntity,WorkerNodeDAO,DisposableWorkerIdAssigner都copy到自己的项目中。

DisposableWorkerIdAssigner主要是修改注入的dao,因为这里我们需要修改默认的dao相关的配置。

依赖

mybatis配置

mapper文件中的namespace及对应domain修改为自己路径下的。

配置UIDGenerator

注意这里的DisposableWorkerIdAssigner是copy到自己项目中的,不是百度提供的。

到此所有的都配置完成了。

完毕!!!

给个 关注+转发 谢谢

Springboot面试题整理附答案

SpringBoot邮件发送示例

使用Spring Boot Admin实时监控你的系统

Spring Boot Security防重登录及在线总数

SpringBoot项目查看线上日志

Springboot整合openfeign使用详解

springboot mybatis jpa 实现读写分离

Springboot接口幂等性基于token实现方案

SpringBoot整合RocketMQ入门示例

Springboot之Actuator详解

Springboot整合MyBatis参数传值方式

SpringBoot开发自己的Starter

springboot中使用布隆过滤器BloomFilter

Spring Cloud Nacos 开启权限验证

SpringBoot整合MyBatis完全使用注解方式定义Mapper

spring data jpa 高级应用

 标签:

评论留言

我要留言

欢迎参与讨论,请在这里发表您的看法、交流您的观点。