创建全局唯一id的几种方式对比

1.存储过程生成
2.利用redis( incr) 原子性自增操作生成id. incr 是redis的原子操作(jredis.incr("global_id")),redis一旦重启,需重置初始值,不重置从0开始自增(需判断值>20000000)
3.利用mybatis+表自增id创建唯一id

image

1.存储过程生成
select * from spu_sku_sequence

create table spu_sku_sequence(
type varchar(50) not null, //业务类型 spu,sku
current_value bigint DEFAULT 0, //当前生成的最大值
PRIMARY key (type)
);

set global log_bin_trust_function_creators=true;

create function get_next_value(p_type varchar(50))
returns integer(11)
begin
declare next_value integer;
set next_value=0;

start TRANSACTION;
select current_value into next_value from spu_sku_sequence where type =p_type for update;
set next_value=next_value + 1;
update spu_sku_sequence set current_value = next_value where type =p_type;

 return next_value;

COMMIT;
end;

select get_next_value("spu")

2.利用redis( incr) 原子性自增操作生成id. incr 是redis的原子操作(jredis.incr("global_id")),redis一旦重启,需重置初始值,不重置从0开始自增(需判断值>20000000)
select get_next_value("sku")

posted @ 2025-06-27 16:52  大树2  阅读(41)  评论(0)    收藏  举报