使用redis批量生成主键(订单)Id
前言:
在多线程、高并发情况下,某些业务场景需要创建唯一标识的主键(订单)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相关推荐
- 使用redis批量生成主键ID
在多线程.高并发情况下,某些业务场景需要创建唯一标识的主键(订单)Id:通常情况下都是一个请求创建一个,考虑到性能和QPS我们会提前生成好一堆随机id保存到redis:从redis进行poll. 1. ...
- java+redis+lua生成自动增长的ID序列号
1.编写lua脚本用于生成主键ID序列号,内容如下 local key = tostring(KEYS[1]); local count = tonumber(KEYS[2]); local date ...
- MyBatis 3 自动生成 主键 针对不同的数据库(oracle/sqlserver/mysql)
MyBatis自动生成的主键很多数据库支持自动生成主键的数据类型.不过这通常(并不总是)是个私有的特性.SQL Map 通过<insert>的子元素<selectKey>来支持 ...
- mysql 存储过程 主键_存储过程生成主键
存储过程生成主键 MySQL delimiter $$CREATE PROCEDURE generateKeys(in pm_name varchar(20))begindeclare curr_Ke ...
- Entity Framework Core 使用HiLo生成主键
HiLo是在NHibernate中生成主键的一种方式,不过现在我们可以在Entity Framework Core中使用.所以在这篇内容中,我将向您在介绍如何在Entity Framework Cor ...
- 多线程调用生成主键流水号存储过程产生主键冲突问题解决方案
遇到开发多线程测试插入数据的时候发现主键冲突问题 问题具体描述如下: -------------------------------------------------------------- 调用 ...
- plsql导入数据主键_使用plsql添加数据并自动生成主键
使用plsql添加数据并自动生成主键 步骤如下: 步骤一:新建需要创建的表如: -- Create table create table IRC_SYS_DATADIC ( datadic_id VA ...
- SQL DDL 生成建表语句(可自动生成主键约束,字段默认值等)
--获取建表DDL(+主键) declare @tabname varchar(50) set @tabname='sys_log'--表名if ( object_id('tempdb.dbo.#t' ...
- 三种获得自动生成主键的方法,getGeneratedKeys,专用SQL和可更新的结果集
简单总结了一下我目前知道的方法. package test; import java.sql.Connection; import java.sql.DriverManager; import jav ...
最新文章
- MySQL高级 - 锁 - InnoDB行锁 - 类型
- 每日一题(42)—— 已知一个数组table,用一个宏定义,求出数据的元素个数
- 第一行Java代码,java高级面试笔试题
- 订餐系统jsp模板_java|web|jsp网上订餐系统|餐饮管理|在线点餐外卖网站|源码代码...
- springboot细节挖掘(集成ElasticSearch)
- 汇编@data_汇编语言(4)--内存段
- 基础知识系列☞关键字→virtual
- 申请google Map api key for android
- iOS UIDatePicker
- 理解 Delphi 的类(十一) - 深入类中的方法[12] - 消息方法
- Zabbix SNMP traps使用
- DIRECTSHOW中的视频捕捉
- 交大计算机毕业去华为,想进华为,报考这几所大学,毕业生在华为扎堆!
- HTML做一个节日页面【六一儿童节】纯HTML代码
- 地理信息安全在线培训考试-判断题
- 进展:Pegasus的自动化编译测试
- 我的分享:第九章:月薪三万执行计划
- Python库turtle的趣味性用法,欢迎来品尝。
- 微信小程序:小程序开发中申请优惠券步骤
- [考研经验]北京邮电大学软件学院2018年考研经验
热门文章
- 在sql server数据库的一个表中如何查询共有多少字段
- Python【02】【基础部分】- B
- 转:HTML错误编号大全
- 上周热点回顾(5.26-6.1)
- USACO sec2.1 Ordered Fractions
- www.beihua.edu.cn计划摘录
- Cannot set property 'value' of undefined
- Redis集群监控及Redis桌面客户端
- hyperledger fabric_鼎诚鬼才|超级账本入门(四):HYPERLEDGER 权限管理
- springboot怎么杀进程_全新Steam在线游戏 Among us太空狼人杀攻略