专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

开发一个通用靠谱的单号生成器

  单号生成器优化
  之前我用Redis开发了一个通用的单号生成器,该单号生成器存了两个key。一个是序号递增的key,一个是记录日期的key。如果当前日期和Redis记录的日期不一致,单号就重置为1,重新从1开始递增。
  因为有查日期和自增两个操作,生成序号的功能就需要加锁。起初加的是JVM级别的锁,但对于多实例的系统来说,JVM级别的锁会失效。于是引用了分布式锁。privatelonggetSuffixCode(Stringkey){RedissonClientredissonClientredissonService。getRedissonClient();RAtomicLongatomicVarredissonClient。getAtomicLong(key);获取当前日期StringtodayStrgetTodayStr();获取redis记录的最大日期StringcodeRecordgetCodeRecord(key);创建分布式锁RLocklockredissonClient。getLock(REDISLOCK。concat(key));longvalue0;try{尝试加锁if(lock。tryLock(10,10,TimeUnit。SECONDS)){if(!atomicVar。isExists()){atomicVar。set(0);}if(StringUtils。isNotBlank(codeRecord)){if(!isSameDay(todayStr,codeRecord)){atomicVar。set(0);}}记录日期saveCodeRecord(key,todayStr);valueatomicVar。incrementAndGet();记录历史StringhistoryKeykey。concat(CODEHISTORYKEY);redisUtils。hset(historyKey,todayStr,String。valueOf(value));}}catch(Exceptione){thrownewServerBizException(500,String。format(单号生成异常,key:〔s〕,key));}finally{if(lock。isLocked()lock。isHeldByCurrentThread()){lock。unlock();}}returnvalue;}
  这里使用了RedissonAPI的锁,并且增加功能,记录每天生成的最大序号。核心代码如上。
  有兴趣的童鞋可以看看我这篇文章:我写了一个简单通用的单号生成器
  现在决定优化下,重新写一个静态调用的单号生成器。
  生成器为静态类CodeUtils。新单号生成器CodeUtils
  主要调用方法如下:publicstaticStringgenerateFullCode(Stringprefix,intdigit){returngenerateFullCode(prefix,yyyyMMdd,GENERALCODE,true,digit);}单号生成器通用单号生成器格式前缀YYMMDD序号列如generatorCode(D,OVERALL,4),当前日期为:20220812生成为:D202208120001paramprefix前缀parammodule业务模块paramdigit编码位数returnpublicstaticStringgenerateFullCode(Stringprefix,Stringmodule,intdigit){returngenerateFullCode(prefix,yyyyMMdd,module,true,digit);}单号生成器paramprefix单号前缀paramdatePattern日期格式parammodule业务模块paramvalidateTenantId是否需要验证当前租户idparamdigit序号位数returnpublicstaticStringgenerateFullCode(Stringprefix,StringdatePattern,Stringmodule,booleanvalidateTenantId,intdigit){StringsuffixCodeStrgetSuffixCodeStr(prefix,datePattern,module,validateTenantId,digit);StringtodayStrgetTodayStr(datePattern);String〔〕codes{prefix,todayStr,suffixCodeStr};returnStream。of(codes)。collect(Collectors。joining());}
  这里我们定义了3种入参的方法generateFullCode,我们开看每种方法的解释:1。generateFullCode(Stringprefix,intdigit)该方法两个入参,默认日期格式为:yyyyMMdd,默认的module为:GENERALCODE。同时开启租户校验。能自定义前缀和定义编号位数。2。generateFullCode(Stringprefix,Stringmodule,intdigit)与方法1的区别在于能自定义module。3。generateFullCode(Stringprefix,StringdatePattern,Stringmodule,booleanvalidateTenantId,intdigit)通用的方法,能自定义单号前缀,日期格式,业务模块,租户id是否验证,序号位数。
  这里我们每天按日期生成一个key,每个key对应当天日期。单号生成的核心代码如下:publicstaticlonggeneratorCode(Stringkey){RedissonClientredissonClientredissonService。getRedissonClient();RAtomicLongatomicVarredissonClient。getAtomicLong(key);设置过期时间2天atomicVar。expire(2,TimeUnit。DAYS);创建分布式锁RLocklockredissonClient。getLock(REDISLOCK。concat(key));longvalue0;try{尝试加锁if(lock。tryLock(10,10,TimeUnit。SECONDS)){if(!atomicVar。isExists()){atomicVar。set(0);}valueatomicVar。incrementAndGet();}}catch(Exceptione){thrownewServerBizException(500,String。format(单号生成异常,key:〔s〕,key));}finally{if(lock。isLocked()lock。isHeldByCurrentThread()){lock。unlock();}}returnvalue;}
  如上代码,我们只需要一个key,就可以实现单号自增。功能还是每天递增,第二天重置。
  我们设置的key如下:privatestaticfinalStringGETNEXTCODEKEYsc:getcode:s:ss:s;privatestaticfinalStringREDISLOCKsccodegeneratorlock;
  这里用到了两个key。第一个是用来生成单号的,第二个是用来做分布式锁的。
  在Redis上的目录如下:
  这里Rediskey组成形式为:sc:getcode固定值,加上租户id,加上单号前缀,加上模块,最后加上日期。
  这里key我们保存两天,当前如果你要永远保存,用来看历史记录。key的有效期设置如下:设置过期时间2天atomicVar。expire(2,TimeUnit。DAYS);功能测试
  调用示例代码如下:TestpublicvoidtestGeneratorCodeNew(){StringprefixTEST;StringmoduleC;StringdateStryyyyMMdd;StringcodeCodeUtils。generateFullCode(prefix,dateStr,module,false,4);System。out。println(code);}
  如上代码,我们生成了单号为TEST202212220001的单号。

云边有个小卖部,货架堆着岁月和夕阳1不一定要漂亮,但一定要快乐不一定要赢,但一定要努力。2你要像太阳一样,有起有落却不失光彩,散发光芒。3眼睛可以近视,目光不可以短浅。4人应该去旅行,在年轻的时候,趁着有脾气装潇洒人民日报金句没有伤痕累累,哪来皮糙肉厚申论写作素材公文材料金句写作素材积累没有伤痕累累,哪来皮糙肉厚,英雄自古多磨难。回头看,崎岖坎坷向前看,永不言弃。在你坚持不住的时候。记得告诉自己想一千次,不如去做一次。华丽地跌倒小米众筹黑科技上线!精致人士拒绝做鼻涕虫,可随身携带小米有品众筹向来都是推出一出一些新鲜玩意,我没想到他这次关注到了一些特殊人群。那就是恨不得没有鼻子的敏感人士!一直以来,我的鼻子都会特别敏感,就连扫地机器人在运行的时候也会打喷嚏。华为mate50正在王者归来!支持国货,你期待吗?今天和大家说说华为mate50,这些年华为手机可以说是咱国产老牌手机啦,已经很多年啦,无论是线上还是线下,华为手机都特别受欢迎!作为国产手机的老大,华为也确实做得很好,自己的芯片自vivoiqoo一代你知道吗?vivoiqoo,是iqoo开山鼻祖也发布于2018年是iqoo火遍全网的经典之作。性能没的说搭在骁龙855,相机方面使用1200w1300w200w摄像,前摄800w,typeC3款天玑1200手机,全部跌到1599元,如何选择难倒大批用户手机市场芯片之争从高通麒麟苹果,慢慢转变成了高通苹果和联发科,苹果不在今天的讨论范围之内,而联发科在近一两年势头很猛,去年发布了天玑1100天玑1200芯片,后者定位旗舰市场,跑分早买早享受,安卓平板正在迎来黄金时代长期没人碰的安卓平板忽然成了品牌们着急推进的产品线,华为三星联想的新品持续热卖,小米荣耀OPPO都在近一年内上线了平板产品,作为安卓源头的谷歌也招来了联合创始人专门负责平板的技术开图文测评海尔冰箱421和501哪个好?两者有什么区别?选购建议更加推荐海尔501。这两款冰箱的价格相差不大。但是在性能上面来说的话,我认为海尔501的更优越。因为海尔501也有母婴专属,三档调温模式,家里有宝宝的家庭,也是很实用的。虽为何欧美家庭必备的洗碗机在国内不受待见?这几点原因很关键洗碗机进入中国已有多年时间,然而市场却一直不温不火。反观欧美国家,洗碗机作为厨房里的常规厨电,几乎是每家必备,其待遇相比国内可谓是一个天一个地。既然同样都是做饭洗碗,为什么两者之间爪哇惊奇(五二)Bromo火山到达与庞越(一)草根影响力新视野肖霞客(旅游达人)参观过潜水艇后,时间也将近三点,就来到火车站准备搭车到庞越市Probolinggo,预留二天的时间要去Bromo与Ijen火山,但到庞越市已是傍晚2022年景点和体验趋势大盘点(上)疫情的冲击之下,零售和旅游都遭到了沉重的打击,随着人们对疫情的认识和处理方式逐步加强完善,景区有望迎来新的爆发。疫情期间,所有旅游行业相关的人都在想办法,各种应对疫情的景点和体验逐
安卓智能pda手持终端定制批发厂家君驭品牌安卓智能pda手持终端可应用于多场景移动使用。具备硬朗坚固的工业设计外观,君驭品牌安卓pda手持终端可结合客户行业应用开发定制,多功能模块和强大的数据采集性能。安卓pda手2台StudioDisplay的桌面,是一种什么体验?在等了三个月之后,苹果终于把StudioDisplay发过来了,我都快忘了还买了台显示器我终于可以把两台StudioDisplay一起摆在桌面上了,今天主要来汇报下最近折腾桌面的那618买什么电视合适?来看看热卖榜前三都有谁很多人在网上买家电时,都比较信赖某电商,适逢618购物大狂欢,我看下了某电商销量前三的电视,分别是华为电视SE小米电视EA65和小米电视EA75,这三款电视究竟有哪些区别呢,下面我性能出色的半画幅无反佳能EOSR7深入评测近日日本网站kakakumag。com发表了一篇佳能EOSR7的评测文章。该文章对这款相机画质对焦连拍操控等多方面进行了详细阐述。自动对焦EOSR7采用与高性能全画幅无反EOSR35月厂商销量排行,一汽大众重回榜首,比亚迪奇瑞实现正增长2022年5月份汽车厂商(批发)销量排行榜出炉,一汽大众重回榜首,自主品牌占据半壁江山,广汽丰田则是唯一进入前十的日系车企。接下来我们分别聊几家车企在5月份的销量表现。一一汽大众长中老年人能做到这6点,多半会长寿问题怎么才能每天都收到这种文章呢?答案只需要点击右上角关注即可。关键的时期如若能够平稳度过,将会发挥承上启下的作用,加大长寿的概率自然而然不在话下。一少管儿女的事情该歇息的时候就歇电脑数据迁移工具推荐,好用到爆炸当我们的旧电脑使用了七八年甚至更久,就会出现一系列的毛病,比如卡顿死机蓝屏黑屏等等,这让我们使用时的体验感非常不好,我们可能就会考虑到更换一台新电脑,这样就可以将旧电脑淘汰了,可是天玑8000Max来到了1589元,厂商为了冲销量也是拼了提到OPPO这个品牌,大家第一时间想到的恐怕是割韭菜厂妹机等字眼,其实,都是OPPO的A系列惹的祸,OPPOk系列拥有很高的性价比如今,随着618的来临,OPPOk10这款手机性价哪吒V潮获5月新势力纯电车型销量冠军再获销冠!哪吒V潮获5月新势力纯电车型销量冠军5月新势力纯电车型销量榜公布哪吒V潮获冠军哪吒汽车稳居造车势力阵营,哪吒V车系连续8个月问鼎新势力纯电SUV销冠近日,2022年5月新恭喜!国乒直板小将苦战五局,20领先拒绝逆转,对手输球后摔拍2022年6月17日,乒乓球克罗地亚赛再传捷报,国乒直板小将梁国栋苦战五局,最终32险胜奥地利名将哈贝松,晋级男单16强,这场比赛充满戏剧性,梁国栋20领先连输两局,凭借第五局的稳凤凰传奇又火了!这次不是因为歌土,而是因为曾毅凤凰传奇,又火了!综艺为歌而赞,火热播出。而在最新的一期中,凤凰传奇这对组合再次返场。这也让许多歌迷和观众为之惊喜。两个人在舞台上演唱的以爱为囚,瞬间燃爆全场。令人最着迷的就是他们
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网