使用redis批量生成主键(订单)Id


前言:

      在多线程、高并发情况下,某些业务场景需要创建唯一标识的主键(订单)Id;通常情况下都是一个请求创建一个,考虑到性能和QPS我们会提前生成好一堆随机id保存到redis;从redis进行poll。

     1、创建一个redis队列服务    

//redis 公共操作服务
@Service
public class RedisPublicService {
    @Resource
    public Redisson redisson;
    
    private RQueue pkQueue;

	@PostConstruct
    public void init() {
		pkQueue=redisson.getQueue("GENERATOR_PRIMARY_KEY"); 
    }
	public RQueue 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()*100000+random.nextInt(99999);
	}

	public Set getPrimaryIds(int num) {
		Set ids = new HashSet();
			while(ids.size()!=num){
				ids.add(getPrimaryId());
			}
		return ids;
	}
	
	@PostConstruct
	public void startup(){
		this.start();
	}
	
	Logger log = LoggerFactory.getLogger(GeneratePrimaryKeyTask.class);

	@SuppressWarnings("static-access")
	public void run(){
		RQueue que=redisService.getPkQueue();
		while(true){
			if(que.size()

使用方法:

 RQueue pkQueue = redisson.getQueue("GENERATOR_PRIMARY_KEY");
 Long key =  pkQueue.poll();

以上就是生成批量id的简单使用~~


之前的csdn找不回来了,决定重新注册一个。望支持~~~

 

 

你可能感兴趣的:(redis,java,消息队列,Redis)