【SpringBoot篇】基于Redis实现生成全局唯一ID的方法
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
@Component
public class RedisIdGenerator {
private static final String KEY_PREFIX = "unique_id:";
@Autowired
private StringRedisTemplate redisTemplate;
public synchronized Long generate() {
ValueOperations<String, String> opsForValue = redisTemplate.opsForValue();
String key = KEY_PREFIX + "counter";
Long id;
// 使用Redis的INCR命令来原子性地递增
// 如果键不存在,INCR命令就会先初始化为0,然后执行递增操作
// 返回的结果是递增后的值
id = opsForValue.increment(key, 1);
// 如果需要,可以在ID的基础上再做其他的格式化或者转换
return id;
}
}
这段代码使用了Spring Data Redis的StringRedisTemplate
来操作Redis,并通过increment
方法实现了全局唯一ID的生成。这个方法是线程安全的,因为它使用了Redis的原子性操作INCR
来递增计数器。这个解决方案适合需要生成全局唯一ID的场景,例如分布式数据库中的主键生成策略。
评论已关闭