订单号规则,不能重复。redis去重 redis集合set应用
订单号规则,不能重复。redis去重 redis集合set应用
redis锁定商品解决并发售卖问题 RedisUtil工具类
https://www.cnblogs.com/oktokeep/p/17917833.html
需求背景:订单号根据日期反转 加上随机数,订单号是否重复,前提是确保当天的订单号不重复,可以确保全局系统中的订单号不重复。
//以下是伪代码
String reversedDate = 工具类获取反转的日期,比如:20240320,反转后变成:02304202;
String serialNumber = 工具类生成序列号;
String orderNo = 订单号前缀 + serialNumber + reversedDate;
//遍历100次,如果重复的前提下。
for(int i = 0; i < 100; i++) {
//保存到redis中,以当前的日期key,订单号作为集合中的值。
Set<String> orderNoSet = redisUtilService.getSetValue(redis前缀KEY + reversedDate);
if (CollectionUtils.isNotEmpty(orderNoSet)) {
if (orderNoSet.contains(orderNo)) {
logger.info("订单号重建前:[{}],i=[{}]",orderNo,i);
//重复,重新生成一个,在下一次循环中再次检查是否重复。
serialNumber = 工具类生成序列号;
orderNo = 订单号前缀 + serialNumber + reversedDate;
logger.info("订单号重建后:[{}],i=[{}]",orderNo,i);
} else {
//不重复,保持到redis set集合中。允许该订单号使用
redisUtilService.setSetValue(redis前缀KEY + reversedDate, orderNo);
logger.info("订单号使用1:[{}],i=[{}]",orderNo,i);
break;
}
}else {
//初始化,该redis有效期按1天
redisUtilService.setSetValue(redis前缀KEY + reversedDate, orderNo);
redisUtilService.expireDay(redis前缀KEY + reversedDate, 1); //保存1天
logger.info("订单号使用2:[{}],i=[{}]",orderNo,i);
break;
}
}
订单号规则,不能重复。redis去重 redis集合set应用的更多相关文章
- php生成订单号-当天从1开始自增
/** * 生成订单号 * -当天从1开始自增 * -订单号模样:20190604000001 * @param Client $redis * @param $key * @param $back: ...
- 基于GO语言实现的支持高并发订单号生成函数
1.固定24位长度订单号,毫秒+进程id+序号. 2.同一毫秒内只要不超过一万次并发,则订单号不会重复. github地址:https://github.com/w3liu/go-common/blo ...
- 采用redis生成唯一且随机的订单号
项目描述 最近做的一个项目有这么一个需求:需要生成一个唯一的11位的就餐码(类似于订单号的概念),就餐码的规则是:一共是11位的数字,前面6位是日期比如2019年07月20就是190720,后面五位是 ...
- 基于redis的订单号生成方案
目前,比较火的nosql数据库,如MongoDB,Redis,Riak都提供了类似incr原子行操作. 下面是PHP版的一种实现方式: <?php /** * 基于Redis的全局订单号id * ...
- MSSQL高并发下生成连续不重复的订单号
一.确定需求 只要做过开发的基本上都有做过订单,只要做过订单的基本上都要涉及生成订单号,可能项目订单号生成规则都不一样,但是大多数规则都是连续增长. 所以假如给你一个这样的需求,在高并发下,以天为单位 ...
- [PHP] PHP多个进程配合redis的有序集合实现大文件去重
1.对一个大文件比如我的文件为 -rw-r--r-- 1 ubuntu ubuntu 9.1G Mar 1 17:53 2018-12-awk-uniq.txt 2.使用split命令切割成10 ...
- ping++微信渠道,第二次拉起不能进行支付返回订单号重复问题
项目中用到了支付功能,采用的是ping++实现的,上线运行一年多都很正常,但是最近突然出现有买家反映说不能进行支付的情况 通过了解和沟通之后发现发现是重复拉起失败,然后我们对问题进行了排查. 测试过程 ...
- iOS-微信支付(订单号重复的问题)
1. 官方文档中说过同一笔交易不能多次提交,出现这个错误让核实商户订单号是否重复提交,但是有些情况下是需要重复提交的,比如:用户微信支付的时候没有付款,直接取消了,那么订单如果已经创建了,在订单中心就 ...
- Java订单号生成,唯一订单号(日均千万级别不重复)
Java订单号生成,唯一订单号 相信大家都可以搜索到很多的订单的生成方式,不懂的直接百度.. 1.订单号需要具备以下几个特点. 1.1 全站唯一性. 1.2 最好可读性. 1.3 随机性,不能重复,同 ...
- 微信的NATIVE支付提示201商户订单号重复的解决方案
无论采取模式一还是模式二,进行预支付ID获取的时候应当确保订单号的唯一性,否则就会造成第二次扫码后的重复提醒. 解决方案: 以预支付ID处理为例: 商城: 1.创建log_id数据表如:out_tra ...
随机推荐
- 最佳实践|Spring Boot 应用如何快速接入 Prometheus 监控
简介:SpringBoot 微服务的开发.发布与部署只占其生命周期的一小部分,应用和系统运维才是重中之重.而运维过程中,监控工作更是占据重要位置.那么,为了对系统的状态进行持续地观测,面向Sprin ...
- [FE] uViewUI u-navbar 曲线解决 uni onNavigationBarButtonTap 的限制与失效
uni 自带的 navigation bar 对于普通的导航需求是够用的,也允许 onNavigationBarButtonTap 加点击事件. 但是会出现异常Bug,表现为在内部页面一番操作后,再返 ...
- C#类型后加问号?
C# 可空类型(Nullable)说明_w3cschool 细说Nullable<T>类型 - Sweet-Tang - 博客园 (cnblogs.com) 值类型变量不能null,加问号 ...
- 设计模式之装饰器-AOP
HelloWorld简单例子如下:此例子好好体会下继承 is a和组合 has a的异同. using System; using System.Runtime.InteropServices; na ...
- Competition Set - Codeforces
这里记录的是这个账号的比赛情况. Codeforces Round 942 (Div. 1) Solved:6/8,AB1B2CDE1 2645-> A 题意:现有 \(a_i\) 张写有 \( ...
- 05.Java 方法详解
1.方法的定义及调用 设计方法的原则:一个方法只完成一个功能,有利于后期的扩展 方法的定义: 修饰符(可选) 返回值类型 方法名(参数类型 参数名(可选)){ 方法体 return 返回值; } 2. ...
- 构造照亮世界——快速沃尔什变换 (FWT)
博客园 我的博客 快速沃尔什变换解决的卷积问题 快速沃尔什变换(FWT)是解决这样一类卷积问题: \[c_i=\sum_{i=j\odot k}a_jb_k \] 其中,\(\odot\) 是位运算的 ...
- GDB 中内存打印命令
GDB 中使用 "x" 命令来打印内存的值,格式为 "x/nfu addr".含义为以 f 格式打印从 addr 开始的 n 个长度单元为 u 的内存值.参数具 ...
- 海康威视web插件安装后,谷歌浏览器还是不能看视频问题
首先要根据弹出的信息提示,下载并安装视频播放插件, 安装完成后重新打开谷歌浏览器,重新登录系统,如果还是不能看视频,请按下面的方法设置: 步骤1:谷歌浏览器,地址栏中输入:chrome://flags ...
- Agile PLM数据库表结构(Oracle)
刚进公司,任务是接管PLM系统,但是还在给外包团队开发,没有代码.无妨先看业务和数据库,ok,业务看不懂,只能先看数据库,数据库没有数据字典,这个系统没有任何文档产出......练手时发现数据库类型是 ...