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 12 Redis
Redis实现订单自动过期功能的示例代码
May 08 Redis
redis内存空间效率问题的深入探究
May 17 Redis
Java Socket实现Redis客户端的详细说明
May 26 Redis
浅谈Redis的几个过期策略
May 27 Redis
浅谈Redis中的RDB快照
Jun 29 Redis
Redis入门教程详解
Aug 30 Redis
redis调用二维码时的不断刷新排查分析
Apr 01 Redis
一文搞懂Redis中String数据类型
Apr 03 Redis
Redis实战高并发之扣减库存项目
Apr 14 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 Redis
Redis实现短信验证码登录的示例代码
Jun 14 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解答方法
2012/02/04 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
js判断运行jsp页面的浏览器类型以及版本示例
2013/10/30 Javascript
javascript中的undefined和not defined区别示例介绍
2014/02/26 Javascript
node.js中的console用法总结
2014/12/15 Javascript
js实现获取当前时间是本月第几周的方法
2015/08/11 Javascript
jQuery插件pagination实现无刷新分页
2016/05/21 Javascript
JS操作input标签属性checkbox全选的实现代码
2017/03/02 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
使用Angular-CLI构建NPM包的方法
2018/09/07 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
js指定日期增加指定月份的实现方法
2018/12/19 Javascript
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
详解Python的Django框架中Manager方法的使用
2015/07/21 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
python查看模块安装位置的方法
2018/10/16 Python
pandas.cut具体使用总结
2019/06/24 Python
anaconda如何查看并管理python环境
2019/07/05 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
python中的垃圾回收(GC)机制
2020/09/21 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
法国设计制造的扫帚和刷子:Andrée Jardin
2018/12/06 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
小学二年级评语
2014/04/21 职场文书
银行竞聘报告范文
2014/11/06 职场文书
九年级数学教学反思
2016/02/17 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
Golang并发操作中常见的读写锁详析
2021/08/30 Golang