首页 > 数据库 >订单号规则,不能重复。redis去重 redis集合set应用

订单号规则,不能重复。redis去重 redis集合set应用

时间:2024-03-20 19:23:40浏览次数:37  
标签:set 前缀 重复 reversedDate redis 订单号 orderNo

订单号规则,不能重复。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;
            }
        }

 

标签:set,前缀,重复,reversedDate,redis,订单号,orderNo
From: https://www.cnblogs.com/oktokeep/p/18085895

相关文章

  • redis的客户端操作,使用场景
    ####配置允许远程链接############1使用配置文件启动redisdaemonizeyesbind0.0.0.0protected-modenorequirepass123456pidfile/var/run/redis.pidport6379dir"/root/redis-7.2.4/data"logfile6379.log#2redis-server./redis-conf#3允许远程链接......
  • windows系统下使用pip安装 Superset
    windows系统下使用pip安装Superset一安装ANACONDAAnaconda官方网站就是可以便捷获取包且对包能够进行管理,同时对环境可以统一管理的发行版本。Anaconda包含了conda、Python在内的超过180个科学包及其依赖项。下载地址:免费下载(anaconda.com)直接点击下一步完成安装二......
  • redis的配置启动
    centos上安装redis#Redis是什么1C语言开源,非关系型数据库:早起版本2w3千行2基于键值对的存储系统:字典形式3多种数据结构:字符串,hash,列表,集合,有序集合4高性能(并发量高),功能丰富(不仅仅做缓存,还能做别的)#那些公司在用github,twitter,stackoverflow,阿里,百度,微博,美团,搜狐......
  • unpack sqlset
     execdbms_sqltune.unpack_stgtab_sqlset(sqlset_name=>'%',sqlset_owner=>'%',replace=>true,staging_table_name=>'STS_JFV_TAB',staging_schema_owner=>'APPS');EXECDBMS_SQLTUNE.UNPACK_STGTAB_SQLSET(......
  • 【开发环境搭建篇】Redis客户端安装和配置
    作者介绍:本人笔名姑苏老陈,从事JAVA开发工作十多年了,带过大学刚毕业的实习生,也带过技术团队。最近有个朋友的表弟,马上要大学毕业了,想从事JAVA开发工作,但不知道从何处入手。于是,产生了写一个博客专栏想法,介绍当前互联网企业JAVA项目开发如何快速入门。本文收录于《30天企......
  • redis自学(22)Redis是单线程还是多线程?
    Redis是单线程还是多线程?Redis到底是单线程还是多线程? 如果仅仅聊Redis的核心的业务处理部分(命令处理),答案是单线程 如果是聊整个Redis那么答案是对线程在Redis版本迭代过程中,在两个重要的时间节点上引入了多线程的支持:Redisv4.0:引入多线程异步处理一些耗时较长的任务,......
  • Redis中文乱码问题
    最近排查问题,发现之前的开发将日志写在redis缓存中(不建议这样做),我在查看日志的时候发现没办法阅读,详细是这样的:查阅资料后发现是进制问题,解决方法是启动客户端的时候将redis-cli改为redis-cli--raw现在查看缓存数据就变成这样的乱码了,这是由于我们写程序使用UTF-8的编......
  • [转]Garnet: 力压Redis的C#高性能分布式存储数据库
    今天看到微软研究院开源了一个新的C#项目,叫Garnet,它实现了Redis协议,可以直接将Redis替换为Garnet,客户端不需要任何修改。根据其官网的信息,简单的介绍一下它。开源仓库地址:https://github.com/microsoft/garnet文档地址:https://microsoft.github.io/garnet/Garnet是微软研究院基......
  • Redis数据库安装与使用总结
    Redis语句总结一、基本概念Redis全称:RemoteDictionaryServer(远程字典服务器)的缩写,以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。使用C语言编写,并以内存作为数据存储介质,所以读写数据的效率极高*redis的官方只提供了linux版本的redis,window系统的redis......
  • [Java基础学习][集合]java常见集合:Java中集合框架提供了大量的集合类:常见的list、set
    总结与区别:Set:去重;      set去重本质:equals+hashcode;    常见的HashSet、TreeSet。    HashSet基于哈希表实现,插入、删除、查找。不保证顺序    TreeSet基于红黑树实现,保证顺序,查找较快;treeSet:排序继承comparable接口进行比较排序   Se......