当前位置:首页 > 科技  > 软件

基于Redisson的RAtomicLong实现全局唯一工单号生成器

来源: 责编: 时间:2024-01-26 09:01:36 317观看
导读最近几年,我一直从事的是运营平台业务开发。每天,我们都需要处理大量的工单配置工作。为了生成工单号,我们建立了一张专用的数据库表,用于记录和生成工单号。每次创建工单时,我们会查询这张表,根据年份字段、月份字段和模块

最近几年,我一直从事的是运营平台业务开发。每天,我们都需要处理大量的工单配置工作。为了生成工单号,我们建立了一张专用的数据库表,用于记录和生成工单号。每次创建工单时,我们会查询这张表,根据年份字段、月份字段和模块编码找到最大的自增序列号。随后,我们将自增序列号加一,与模块编码、年月序列号拼接以生成工单号,并将相关信息写入表中。这种方法一直使用得很顺利,因为工单配置的量并不是特别大,一直都没有出现问题。然而,最近我们为第三方提供了一个工单推送的接口,他们一次性推送了大量的工单,这导致不仅生成了许多重复工单号,而且还引起了接口性能方面的问题。因此,我们决定对工单号生成方式进行改进,本文我们将介绍下我们新的生成方法。lHn28资讯网——每日最新资讯28at.com

实现思路

这次我们采用了 Redisson 的 RAtomicLong 来生成一个以固定字符加上年月为键的自增数。随后,将自增数转换为36进制字符串,以年月和36进制字符串拼接形成全局唯一的工单号。lHn28资讯网——每日最新资讯28at.com

代码实现

SerialIdService.javalHn28资讯网——每日最新资讯28at.com

@Service@Slf4jpublic class SerialIdService {    private static final String ID_KEY = "xiuji:";    private static final int BASE_36 = 36;    private static final Integer SEQUENCE_LENGTH = 5;    @Resource    private RedissonClient redissonClient;    public String workSerialId() {        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyMM");        String dateStr = LocalDate.now().format(formatter);        //使用了Redisson的AtomicLong对象生成唯一序列号        RAtomicLong atomicLong = redissonClient.getAtomicLong(ID_KEY+dateStr);        //设置过期时间为35天        if(atomicLong.get() == 0){            atomicLong.expire(Duration.ofDays(35));        }        //将唯一序列号转换为36进制的字符串,长度为4位,用于减少ID的长度        String sequenceStr = Long.toString(atomicLong.incrementAndGet(), BASE_36).toUpperCase();        //36进制的序列号若小于4位,则用0补齐高位        if (sequenceStr.length() < SEQUENCE_LENGTH) {            sequenceStr = String.format("%4s", sequenceStr).replace(' ', '0');;        }        String serialId = dateStr+sequenceStr;        log.info("生成的工单号:{}",dateStr+sequenceStr);        return dateStr+sequenceStr;    }}

生成的工单号示例:lHn28资讯网——每日最新资讯28at.com

240121AXT6240121AXT7240121AXT8240121AXT9240121AXTA240121AXTB240121AXTC240121AXTD240121AXTE240121AXTF240121AXTG240121AXTH240121AXTI240121AXTJ

总结

通过Redisson的RAtomicLong,我们成功实现了一个简单而强大的全局唯一工单号生成器。该生成器保证了唯一性,且在分布式环境中表现出色。在实际应用中,可以根据业务需求进行调整和扩展,以满足更复杂的场景。lHn28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-68323-0.html基于Redisson的RAtomicLong实现全局唯一工单号生成器

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: JDK17 与 JDK11 特性差异浅谈

下一篇: Dalvik与ART的架构差异,你学会了吗?

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • 帅气纯真少年!日本最帅初中生选美冠军出炉

    日本第一帅哥初一生选美大赛冠军现已正式出炉,冠军是来自千叶县的宗田悠良。日本一直热衷于各种选美大赛,从&ldquo;最美JK&rdquo;起到&ldquo;最美女星&r
  • 2023 年的 Node.js 生态系统

    随着技术的不断演进和创新,Node.js 在 2023 年达到了一个新的高度。Node.js 拥有一个庞大的生态系统,可以帮助开发人员更快地实现复杂的应用。本文就来看看 Node.js 最新的生
  • 十个简单但很有用的Python装饰器

    装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • 四年持续更迭坚持探索行业无人之境,HarmonyOS 4带来五大升级多项创新

    除了华为每年新发布的旗舰手机系列,上亿花粉更加期待鸿蒙系统每次的跨版本大更新。8月4日,HarmonyOS 4于HDC 2023正式发布,这也是该系统历经四年的再
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • AI芯片初创公司Tenstorrent获三星和现代1亿美元投资

    Tenstorrent是一家由芯片行业资深人士Jim Keller领导的加拿大初创公司,专注于开发人工智能芯片,该公司周三表示,已经从现代汽车集团和三星投资基金等
Top