前言:
在多线程、高并发情况下,某些业务场景需要创建唯一标识的主键(订单)Id;通常情况下都是一个请求创建一个,考虑到性能和QPS我们会提前生成好一堆随机id保存到redis;从redis进行poll。
1、创建一个redis队列服务
//redis 公共操作服务
@Service
public class RedisPublicService {
@Resource
public Redisson redisson;
private RQueue<Long> pkQueue;
@PostConstruct
public void init() {
pkQueue=redisson.getQueue("GENERATOR_PRIMARY_KEY");
}
public RQueue<Long> getPkQueue(){
return pkQueue;
}
}
2、创建线程进行生成批量id
@Component
public class GeneratePrimaryKeyTask extends Thread{
@Autowired
private RedisPublicService redisService;
private final int cnt=10000;
private final Random random=new Random();
public Long getPrimaryId() {
//length=18 ;变量赋随机值1000-9999
return System.currentTimeMillis