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实现订单自动过期功能的示例代码
May 08 Redis
Redis数据结构之链表与字典的使用
May 11 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 Redis
Redis的字符串是如何实现的
Oct 24 Redis
redis中lua脚本使用教程
Nov 01 Redis
Redis Stream类型的使用详解
Nov 11 Redis
Redis中key的过期删除策略和内存淘汰机制
Apr 12 Redis
浅谈Redis的事件驱动模型
May 30 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 Redis
关于Redis的主从复制及哨兵问题
Jun 16 Redis
使用Redis实现分布式锁的方法
Jun 16 Redis
Redis主从复制操作和配置详情
Sep 23 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
一文搞懂Redis中String数据类型
Apr 03 #Redis
使用Redis做预定库存缓存功能
sentinel支持的redis高可用集群配置详解
redis sentinel监控高可用集群实现的配置步骤
redis调用二维码时的不断刷新排查分析
Apr 01 #Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
You might like
PHP通用分页类page.php[仿google分页]
2008/08/31 PHP
php提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
基于javascript实现样式清新图片轮播特效
2016/03/30 Javascript
JavaScript中数组的22种方法必学(推荐)
2016/07/20 Javascript
JavaScript数组和对象的复制
2017/03/21 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
JS面向对象之多选框实现
2020/01/17 Javascript
移动端JS实现拖拽两种方法解析
2020/10/12 Javascript
Python数据结构之图的应用示例
2018/05/11 Python
python模块smtplib学习
2018/05/22 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
Python 获取windows桌面路径的5种方法小结
2019/07/15 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Python使用Opencv实现图像特征检测与匹配的方法
2019/10/30 Python
Python文本处理简单易懂方法解析
2019/12/19 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
tensorflow tf.train.batch之数据批量读取方式
2020/01/20 Python
Pytorch生成随机数Tensor的方法汇总
2020/09/09 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
HTML5 embed 标签使用方法介绍
2013/08/13 HTML / CSS
AmazeUI 平滑滚动效果的示例代码
2020/08/20 HTML / CSS
美国糖果店:Sugarfina
2019/02/21 全球购物
Parfumdreams芬兰:购买香水和化妆品
2021/02/13 全球购物
材料物理专业个人求职信
2013/12/15 职场文书
保护环境倡议书300字
2014/05/19 职场文书
服务行业演讲稿
2014/09/02 职场文书
十八大观后感
2015/06/12 职场文书
《自己去吧》教学反思
2016/02/16 职场文书