订单号规则,不能重复。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应用的更多相关文章

  1. php生成订单号-当天从1开始自增

    /** * 生成订单号 * -当天从1开始自增 * -订单号模样:20190604000001 * @param Client $redis * @param $key * @param $back: ...

  2. 基于GO语言实现的支持高并发订单号生成函数

    1.固定24位长度订单号,毫秒+进程id+序号. 2.同一毫秒内只要不超过一万次并发,则订单号不会重复. github地址:https://github.com/w3liu/go-common/blo ...

  3. 采用redis生成唯一且随机的订单号

    项目描述 最近做的一个项目有这么一个需求:需要生成一个唯一的11位的就餐码(类似于订单号的概念),就餐码的规则是:一共是11位的数字,前面6位是日期比如2019年07月20就是190720,后面五位是 ...

  4. 基于redis的订单号生成方案

    目前,比较火的nosql数据库,如MongoDB,Redis,Riak都提供了类似incr原子行操作. 下面是PHP版的一种实现方式: <?php /** * 基于Redis的全局订单号id * ...

  5. MSSQL高并发下生成连续不重复的订单号

    一.确定需求 只要做过开发的基本上都有做过订单,只要做过订单的基本上都要涉及生成订单号,可能项目订单号生成规则都不一样,但是大多数规则都是连续增长. 所以假如给你一个这样的需求,在高并发下,以天为单位 ...

  6. [PHP] PHP多个进程配合redis的有序集合实现大文件去重

    1.对一个大文件比如我的文件为 -rw-r--r--  1 ubuntu ubuntu  9.1G Mar  1 17:53 2018-12-awk-uniq.txt 2.使用split命令切割成10 ...

  7. ping++微信渠道,第二次拉起不能进行支付返回订单号重复问题

    项目中用到了支付功能,采用的是ping++实现的,上线运行一年多都很正常,但是最近突然出现有买家反映说不能进行支付的情况 通过了解和沟通之后发现发现是重复拉起失败,然后我们对问题进行了排查. 测试过程 ...

  8. iOS-微信支付(订单号重复的问题)

    1. 官方文档中说过同一笔交易不能多次提交,出现这个错误让核实商户订单号是否重复提交,但是有些情况下是需要重复提交的,比如:用户微信支付的时候没有付款,直接取消了,那么订单如果已经创建了,在订单中心就 ...

  9. Java订单号生成,唯一订单号(日均千万级别不重复)

    Java订单号生成,唯一订单号 相信大家都可以搜索到很多的订单的生成方式,不懂的直接百度.. 1.订单号需要具备以下几个特点. 1.1 全站唯一性. 1.2 最好可读性. 1.3 随机性,不能重复,同 ...

  10. 微信的NATIVE支付提示201商户订单号重复的解决方案

    无论采取模式一还是模式二,进行预支付ID获取的时候应当确保订单号的唯一性,否则就会造成第二次扫码后的重复提醒. 解决方案: 以预支付ID处理为例: 商城: 1.创建log_id数据表如:out_tra ...

随机推荐

  1. 技术干货 | 阿里云数据库PostgreSQL 13大版本揭秘

    简介: 阿里云RDS PostgreSQL是一款兼容开源PostgreSQL的全托管云数据库产品,自2015年首次发布以来,根据用户需求不断升级迭代,已支持9.4.10.11.12等多个版本,覆盖了高 ...

  2. 双11特刊|十年磨一剑,云原生多模数据库Lindorm 2021双11总结

    ​前言 2021 年,转眼 Lindorm 已经在阿里发展了十年的时间,从基于 HBase 深度改造的 Lindorm 1.0 版本,到全面重构,架构大幅升级的 Lindorm 2.0 版本:从单一的 ...

  3. 阿里集团业务驱动的升级 —— 聊一聊Dubbo 3.0 的演进思路

    简介: 阿里云在 2020年底提出了"三位一体"理念,目标是希望将"自研技术"."开源项目"."商业产品"形成统一的技术 ...

  4. 2019-11-29-C#-如何写-DEBUG-输出

    title author date CreateTime categories C# 如何写 DEBUG 输出 lindexi 2019-11-29 08:28:35 +0800 2018-2-13 ...

  5. 构建RAG应用-day05: 如何评估 LLM 应用 评估并优化生成部分 评估并优化检索部分

    评估 LLM 应用 1.一般评估思路 首先,你会在一到三个样本的小样本中调整 Prompt ,尝试使其在这些样本上起效. 随后,当你对系统进行进一步测试时,可能会遇到一些棘手的例子,这些例子无法通过 ...

  6. 记录一个vue路由拦截效果的小技巧

    使用一句三元表达式, <router-link class="flex-left left" tag="div" :to="loginState ...

  7. Java根据URL截图的4种方式

    方案选择 XHTMLRenderer(不要用) PhantomJs(三方库,已停更) Puppeteer(Chrome团队开发和维护) Selenium(支持多浏览器.多语言,服务器需要安谷歌浏览器) ...

  8. 微软开源 MS-DOS「GitHub 热点速览」

    上周又是被「大模型」霸榜的一周,各种 AI.LLM.ChatGPT.Sora.RAG 的开源项目在 GitHub 上"争相斗艳".这不 Meta 刚开源 Llama 3 没几天,苹 ...

  9. [WC/CTS2024] 线段树 题解

    Link 纪念一下场切题. 题意:给定一棵(分点不一定为中点)的线段树,给定若干个询问区间,问有多少个线段树上结点的集合,知道了这些结点对应的区间和就可以知道任何一个询问区间的和. 从询问区间开始考虑 ...

  10. Soluton Set - ZJOI历年真题

    upd:不考浙江省选了.这个题解贴应该不会再更新了. upd:进省队了.再做点,再写点. ZJOI2022 Day1T1 Link&Submission. tag:组合计数,容斥 假设固定了第 ...