前言:

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

1、创建一个redis队列服务

//redis 公共操作服务
@Service
public class RedisPublicService {@Resourcepublic Redisson redisson;private RQueue<Long> pkQueue;@PostConstructpublic void init() {pkQueue=redisson.getQueue("GENERATOR_PRIMARY_KEY"); }public RQueue<Long> getPkQueue(){return pkQueue;}
}复制代码

2、创建线程进行生成批量id

@Component
public class GeneratePrimaryKeyTask extends Thread{@Autowiredprivate RedisPublicService redisService;private final int cnt=10000;private final Random random=new Random();public Long getPrimaryId() {//length=18 ;变量赋随机值1000-9999return System.currentTimeMillis()*100000+random.nextInt(99999);}public Set<Long> getPrimaryIds(int num) {Set<Long> ids = new HashSet<Long>();while(ids.size()!=num){ids.add(getPrimaryId());}return ids;}@PostConstructpublic void startup(){this.start();}Logger log = LoggerFactory.getLogger(GeneratePrimaryKeyTask.class);@SuppressWarnings("static-access")public void run(){RQueue<Long> que=redisService.getPkQueue();while(true){if(que.size()<cnt){ //当队列的数量小于cnt就会生成插入que.addAll(getPrimaryIds(cnt));log.info("create pk to redis current amount:"+que.size());}else{try {Thread.sleep(10);} catch (InterruptedException e) {e.printStackTrace();}}}}
}复制代码

使用方法:

 RQueue<Long> pkQueue = redisson.getQueue("GENERATOR_PRIMARY_KEY");Long key =  pkQueue.poll();复制代码

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

转载于:https://juejin.im/post/5cf60203f265da1b6c5f624c

使用redis批量生成主键(订单)Id相关推荐

  1. 使用redis批量生成主键ID

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

  2. java+redis+lua生成自动增长的ID序列号

    1.编写lua脚本用于生成主键ID序列号,内容如下 local key = tostring(KEYS[1]); local count = tonumber(KEYS[2]); local date ...

  3. MyBatis 3 自动生成 主键 针对不同的数据库(oracle/sqlserver/mysql)

    MyBatis自动生成的主键很多数据库支持自动生成主键的数据类型.不过这通常(并不总是)是个私有的特性.SQL Map 通过<insert>的子元素<selectKey>来支持 ...

  4. mysql 存储过程 主键_存储过程生成主键

    存储过程生成主键 MySQL delimiter $$CREATE PROCEDURE generateKeys(in pm_name varchar(20))begindeclare curr_Ke ...

  5. Entity Framework Core 使用HiLo生成主键

    HiLo是在NHibernate中生成主键的一种方式,不过现在我们可以在Entity Framework Core中使用.所以在这篇内容中,我将向您在介绍如何在Entity Framework Cor ...

  6. 多线程调用生成主键流水号存储过程产生主键冲突问题解决方案

    遇到开发多线程测试插入数据的时候发现主键冲突问题 问题具体描述如下: -------------------------------------------------------------- 调用 ...

  7. plsql导入数据主键_使用plsql添加数据并自动生成主键

    使用plsql添加数据并自动生成主键 步骤如下: 步骤一:新建需要创建的表如: -- Create table create table IRC_SYS_DATADIC ( datadic_id VA ...

  8. SQL DDL 生成建表语句(可自动生成主键约束,字段默认值等)

    --获取建表DDL(+主键) declare @tabname varchar(50) set @tabname='sys_log'--表名if ( object_id('tempdb.dbo.#t' ...

  9. 三种获得自动生成主键的方法,getGeneratedKeys,专用SQL和可更新的结果集

    简单总结了一下我目前知道的方法. package test; import java.sql.Connection; import java.sql.DriverManager; import jav ...

最新文章

  1. MySQL高级 - 锁 - InnoDB行锁 - 类型
  2. 每日一题(42)—— 已知一个数组table,用一个宏定义,求出数据的元素个数
  3. 第一行Java代码,java高级面试笔试题
  4. 订餐系统jsp模板_java|web|jsp网上订餐系统|餐饮管理|在线点餐外卖网站|源码代码...
  5. springboot细节挖掘(集成ElasticSearch)
  6. 汇编@data_汇编语言(4)--内存段
  7. 基础知识系列☞关键字→virtual
  8. 申请google Map api key for android
  9. iOS UIDatePicker
  10. 理解 Delphi 的类(十一) - 深入类中的方法[12] - 消息方法
  11. Zabbix SNMP traps使用
  12. DIRECTSHOW中的视频捕捉
  13. 交大计算机毕业去华为,想进华为,报考这几所大学,毕业生在华为扎堆!
  14. HTML做一个节日页面【六一儿童节】纯HTML代码
  15. 地理信息安全在线培训考试-判断题
  16. 进展:Pegasus的自动化编译测试
  17. 我的分享:第九章:月薪三万执行计划
  18. Python库turtle的趣味性用法,欢迎来品尝。
  19. 微信小程序:小程序开发中申请优惠券步骤
  20. [考研经验]北京邮电大学软件学院2018年考研经验

热门文章

  1. 在sql server数据库的一个表中如何查询共有多少字段
  2. Python【02】【基础部分】- B
  3. 转:HTML错误编号大全
  4. 上周热点回顾(5.26-6.1)
  5. USACO sec2.1 Ordered Fractions
  6. www.beihua.edu.cn计划摘录
  7. Cannot set property 'value' of undefined
  8. Redis集群监控及Redis桌面客户端
  9. hyperledger fabric_鼎诚鬼才|超级账本入门(四):HYPERLEDGER 权限管理
  10. springboot怎么杀进程_全新Steam在线游戏 Among us太空狼人杀攻略