两种开源分布式主键生成器简介

1.UidGenerator–百度开源分布式id生成器
UidGenerator使用Java实现,基于Snowflake算法的唯一ID生成器。
gitee地址:https://gitee.com/mirrors/UidGenerator

UidGenerator在每次启动时,会把机器的host_name和port插入表中,把新纪录的id作为本实例的workerId,以此来保证每个实例在任何时间workerId的唯一性。

UidGenerator提供了DefaultUidGenerator和CachedUidGenerator两种id生成器。
DefaultUidGenerator是Snowflake算法的一种实现。
CachedUidGenerator继承自DefaultUidGenerator,并做了以下两点改进:
(1)使用未来时间,解决了Snowflake算法sequence天然存在的并发限制,及在出现时钟回拨时产生重复id的问题。
(2)使用RingBuffer数组缓存预先生成的uid,并行化uid的生产和消费,最终使单机QPS可达600万,适用于高性能场景。
RingBuffer填充uid时机:
(1)RingBuffer初始化时,预先填充maxSequence个uid到RingBuffer。
(2)take()消费时,获取uid前先检查剩余可用slot量(tail - cursor),如小于设定阈值paddingThreshold,则异步填充maxSequence个uid到RingBuffer。
(3)通过Schedule线程定时填充maxSequence个uid到RingBuffer。可通过设置scheduleInterval启动定时填充功能。

2.Leaf–美团点评分布式ID生成器
Leaf 使用Java实现,提供两种生成ID的方式(Snowflake模式和号段模式),可以通过修改配置选择ID的生成方式。
Snowflake模式,算法取自twitter开源的snowflake算法。
号段模式,需要依赖数据库建立DB表。
GitHub地址:https://github.com/Meituan-Dianping/Leaf
官方文档地址:https://tech.meituan.com/2017/04/21/mt-leaf.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 MyBatis Plus 中,你可以自定义主键生成器生成自定义的主键值。以下是一个示例: 1. 创建一个实现了 IdentifierGenerator 接口的自定义主键生成器类,例如 CustomIdGenerator: ```java public class CustomIdGenerator implements IdentifierGenerator { @Override public Serializable nextId(Object entity) { // 这里编写自己的主键生成逻辑 // 返回生成主键值 } } ``` 2. 在实体类中使用 @TableId 注解指定使用自定义主键生成器,例如: ```java public class User { @TableId(type = IdType.ASSIGN_ID, generator = "customIdGenerator") private Long id; // 其他属性和方法省略 } ``` 3. 在 MyBatis Plus 的配置文件中配置自定义主键生成器,例如 application.properties 或 application.yml: ```yaml mybatis-plus: global-config: db-config: id-type: auto # 设置全局的主键类型为自动增长 configuration: id-generator-type: custom # 设置自定义主键生成器 ``` 4. 在 MyBatis Plus 的配置类中将自定义主键生成器注册到 MyBatis 的全局配置中,例如: ```java @Configuration public class MybatisPlusConfig { @Bean public IdentifierGenerator customIdGenerator() { return new CustomIdGenerator(); } @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); // 添加其他拦截器 return interceptor; } } ``` 通过以上步骤,你就可以使用自定义的主键生成器生成自定义的主键值了。请根据你的实际需求来编写自己的主键生成逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值