快速生成不重复的卡号
蜘蛛网有很多购物卡,电影优惠券,抵用券。
比如一个需求后台此刻需要生成新的一批10万条卡号,3万给微信渠道,5万主站,app,2万外部渠道发放。
那么如何快速生成卡号,而且不重复呢?
逻辑很简单,就是通过某种方法生成一个随机的卡号,然后去数据库排重,不重复就插入,直到10万条。
1、什么方法生成卡号呢?
不同的业务类型可以区分,抵用券的用DY开头,兑换券用DH开头,这样做是为了查询重复时候加速,你还可以继续加维度
2、怎么生成,保证速度?
一开始只想到怎么生成卡号数据,能避免查询重复,结果卡的长度不太可能短,体验不好。
后来经同事一提醒,存储过程,那就写存储过程。
存储过程结果也是比较慢,1000条大约33s。然后又问那个同事,批量。我想起来mysql的批量
set autocommit=0;
CREATE TABLE `biz_card` (`id` int(11) NOT NULL AUTO_INCREMENT,`cardno` varchar(50) DEFAULT NULL,`status` tinyint(4) DEFAULT '0',PRIMARY KEY (`id`),KEY `ix_cardno` (`cardno`)
) ENGINE=InnoDB AUTO_INCREMENT=7303 DEFAULT CHARSET=utf8;
DROP PROCEDURE IF EXISTS `genCardNo`;
CREATE PROCEDURE genCardNo(IN num int)
begin -- 产生一个随机7位数DECLARE newCard int; set autocommit=0;while num>0 doSET newCard=FLOOR(10000000+ (RAND() * 89999999));select @repCount:=count(id) from biz_card where cardno=CONCAT('DY',newCard);-- 重复判断if @repCount>0 THENSELECT concat('the value is repeat:', 'DY',newCard);elseinsert biz_card(cardno,status)values(CONCAT('DY',newCard),0);set num = num - 1; if num%5000=0 then SELECT concat('begin commit,num:',num);commit;end if;end if;end WHILE;commit;end;[SQL] call genCardNo(1000);
受影响的行: 1
时间: 0.3s
[SQL] call genCardNo(100000);
受影响的行: 0
时间: 15.350s
这样好像可以了。如果数据量再大呢,接下来我的想法是通过消息队列分发到不同机器上去生成,排重采用redis存储处理
快速生成不重复的卡号相关推荐
- php网页批量写入数据库卡密_php编写批量生成不重复的卡号密码代码
闲的蛋疼的时候,顺便加强下自己对PHP中数组操纵的一些技巧,就写了下面的一段小代码,可以随机生成卡号密码对应的数组,并且自动去重复,思路没有,纯粹瞎掰. function MakeCard() { s ...
- php如何生成订单号,php如何生成不重复订单号
php生成不重复订单号的方法:首先可以预先生成订单号:然后进行去重存起来:最后用的时候取一个出来用就行,代码为[$orderNo = date('YmdHis').substr(microtime() ...
- php产生订单号不重复,php如何生成不重复订单号
php生成不重复订单号的方法:首先可以预先生成订单号:然后进行去重存起来:最后用的时候取一个出来用就行,代码为[$orderNo = date('YmdHis').substr(microtime() ...
- Excel如何快速生成不重复随机整数
日常工作中我们经常会遇到要生成随机数的情况,比如分考场.分班级.抽样.抽奖等等.下面就给大家介绍一下如何生成不重复随机数. 一.工具法 1.如下图是某学校考试座次表,姓名列已经完成,现在我们要在座次列 ...
- sqlserver如何快速生成不重复的随机数据
/*1. 如何生成8位随机数,生成的数越随机,重复的可能性当然越小 2. 控制不重复 3. 考虑性能 针对这个问题,我写了如下的示例来解决,希望能为有这类需求的人提供指导 */ USE tempdb ...
- php 不重复订单号,php如何生成不重复的订单号,php不重复订单编号
php如何生成不重复的订单号PHP如何生成重复的订单号,php生成不重复订单号的方法如下:1.利用数据库的主键值生成自增订单号:2.实现"日期自增号"的订单号:3.生成随机订单号: ...
- php 不重复订单号,php如何生成不重复的订单号
php生成不重复订单号的方法:1.利用数据库主键值产生一个自增长的订单号:2.实现"日期+自增长数字"的订单号:3.产生随机的订单号:4.实现"字母+数字字符串式&quo ...
- 批量生成不重复的虚拟卡卡号和密码
一. 网站开发需要一组虚拟的消费卡,卡号和密码不重复,且具有随机特性 1 <?php 2 $numLen=16; //必须16以上 要不然重复的可能性很高 3 $pwdLen=10; 4 $c= ...
- java获取不重复订单号,Java 生成永不重复的订单号
package com.taiping.test; import java.text.SimpleDateFormat; import java.util.Date; import java.util ...
最新文章
- 【OpenGL】向Shader中传递数据
- Android学习笔记13-Acitivty与Fragment通信
- 【PowerBi】Power Query导入Excel数据
- 如何设计良好的viewcontroller
- 利益相关者软件工程_如何向利益相关者解释用户体验的重要性
- [数据结构]树、森林与二叉树之间的相互转换方法
- oracle 11g 组合分区,Oracle数据库
- php proc open 返回,PHP proc_open多次打开
- ros怎么跑小车_ROS坐标转换讲解 | Autolabor Simulation
- 接口自动化持续集成实战
- mybatis generator 中文注释_[SpringBoot2.X] 23- 整合持久层技术 -MyBatis - 配置
- vue+node全栈移动商城【7】路由跳转-注册页面
- 美团商品知识图谱的构建及应用
- 2019年第十届蓝桥杯A组国赛(C/C++)
- 掌握销售谈判三大策略,开单成功率提升60%!
- 合成大西瓜自制版教程
- stack-es-标准篇-ElasticsearchClient-combined_fields
- Redis数据库(二)
- leetcode5490
- python项目管理工具_项目管理工具之Trac