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 24 Redis
Redis6.0搭建集群Redis-cluster的方法
May 08 Redis
使用Redis实现秒杀功能的简单方法
May 08 Redis
基于Redis过期事件实现订单超时取消
May 08 Redis
redis实现共同好友的思路详解
May 26 Redis
详解Redis复制原理
Jun 04 Redis
Window server中安装Redis的超详细教程
Nov 17 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
在Centos 8.0中安装Redis服务器的教程详解
Mar 21 Redis
Redis 报错 error:NOAUTH Authentication required
May 15 Redis
Redis实现订单过期删除的方法步骤
Jun 05 Redis
如何使用注解方式实现 Redis 分布式锁
Jul 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 UTF-8、Unicode和BOM问题
2010/05/18 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
JavaScript修改css样式style
2008/04/15 Javascript
javascript String 对象
2008/04/25 Javascript
5分钟理解JavaScript中this用法分享
2013/11/09 Javascript
下拉列表select 由左边框移动到右边示例
2013/12/04 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
一款由jquery实现的整屏切换特效
2014/09/15 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
微信小程序开发之录音机 音频播放 动画实例 (真机可用)
2016/12/08 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
动态Axios的配置步骤详解
2018/01/12 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
vue和小程序项目中使用iconfont的方法
2020/05/19 Javascript
简单介绍Python中的decode()方法的使用
2015/05/18 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
Python使用smtp和pop简单收发邮件完整实例
2018/01/09 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
PyQt5 窗口切换与自定义对话框的实例
2019/06/20 Python
python NumPy ndarray二维数组 按照行列求平均实例
2019/11/26 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
CSS3教程:新增加的结构伪类
2009/04/02 HTML / CSS
css3设置box-pack和box-align让div里面的元素垂直居中
2014/09/01 HTML / CSS
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
介绍一下代理模式(Proxy)
2014/10/17 面试题
爱国卫生月活动总结范文
2014/04/25 职场文书
服装设计专业求职信
2014/06/16 职场文书
中专生自荐信
2014/06/25 职场文书
周恩来的四个昼夜观后感
2015/06/03 职场文书
新郎父母婚礼答谢词
2015/09/29 职场文书
严以律己学习心得体会
2016/01/13 职场文书
学习党章心得体会2016
2016/01/15 职场文书