Redis 串行生成顺序编码的方法实现


Posted in Redis onApril 03, 2022

场景:针对于分布式并发环境,易出现编码生成重复问题

方案特点:串行操作可避免阻塞加锁,处理效率更高

具体解决方案

 Redis 串行生成顺序编码的方法实现

private final static String ENTERPRISE_CODE = "enterpriseCode";

@Resource
private RedisTemplate redisTemplate;

private String generateCode() {
    String code;
    if (!redisTemplate.hasKey(ENTERPRISE_CODE)) {
        // Mybatis-Plus 查询数据库中企业编码最大值
        EnterprisePO enterprise = enterpriseService.getOne(
            Wrappers.<EnterprisePO>lambdaQuery()
                .orderByDesc(EnterprisePO::getCode)
                .last("limit 1"));
        // 缓存企业编码
        if (ObjectUtils.isNotEmpty(enterprise)) {
            // 如果 key 不存在才 set 避免并发重复 set,setIfAbsent() 属于原子操作
            redisTemplate.opsForValue().setIfAbsent(ENTERPRISE_CODE, Long.valueOf(enterprise.getCode()));
            // 也可设置 key 过期时间,此处设置为 1 天
            // redisTemplate.opsForValue().setIfAbsent(ENTERPRISE_CODE, Long.valueOf(enterprise.getCode()), 1, TimeUnit.DAYS);
        }
    }
    // 以递增方式缓存最新编码
    Long number = redisTemplate.opsForValue().increment(ENTERPRISE_CODE, 1L);
    // %06d 意为保留 6 位数,不足六位数字前面补 0
    code = String.format("%06d", number);
    return code;
}

到此这篇关于 Redis 串行生成顺序编码的方法实现的文章就介绍到这了,更多相关 Redis 串行生成顺序编码内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Redis 相关文章推荐
redis配置文件中常用配置详解
Apr 14 Redis
Redis安装启动及常见数据类型
Apr 14 Redis
详解RedisTemplate下Redis分布式锁引发的系列问题
Apr 27 Redis
详解Redis主从复制实践
May 19 Redis
Redis 哨兵集群的实现
Jun 18 Redis
Redis源码阅读:Redis字符串SDS详解
Jul 15 Redis
Redis如何实现分布式锁
Aug 23 Redis
基于Redis的List实现特价商品列表功能
Aug 30 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
Redis集群节点通信过程/原理流程分析
Mar 18 Redis
Redis基本数据类型String常用操作命令
Jun 01 Redis
python中使用redis用法详解
Dec 24 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
一文搞懂Redis中String数据类型
Apr 03 #Redis
使用Redis做预定库存缓存功能
sentinel支持的redis高可用集群配置详解
redis sentinel监控高可用集群实现的配置步骤
redis调用二维码时的不断刷新排查分析
Apr 01 #Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
You might like
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
关于PHP语言构造器介绍
2013/07/08 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
VBScript版代码高亮
2006/06/26 Javascript
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享
2013/07/02 Javascript
jQuery实现鼠标可拖动调整表格列宽度
2014/05/26 Javascript
百度地图自定义控件分享
2015/03/04 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
javascript事件模型介绍
2016/05/31 Javascript
炫酷的js手风琴效果
2016/10/13 Javascript
详解JavaScript模块化开发
2016/12/04 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
Vue如何获取数据列表展示
2019/12/11 Javascript
对vue生命周期的深入理解
2020/12/03 Vue.js
python使用xauth方式登录饭否网然后发消息
2014/04/11 Python
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
python异步存储数据详解
2019/03/19 Python
50行Python代码获取高考志愿信息的实现方法
2019/07/23 Python
NumPy统计函数的实现方法
2020/01/21 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
如果有两个类A,B,怎么样才能使A在发生一个事件的时候通知B
2016/03/12 面试题
文员自我评价怎么写
2013/09/19 职场文书
纠风工作实施方案
2014/03/15 职场文书
药品营销专业毕业生自荐信
2014/07/02 职场文书
供电工程专业求职信
2014/08/09 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
同意离婚答辩状
2015/05/22 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技