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 15 Redis
redis内存空间效率问题的深入探究
May 17 Redis
详解redis分布式锁的这些坑
May 19 Redis
解析高可用Redis服务架构分析与搭建方案
Jun 20 Redis
Redis调用Lua脚本及使用场景快速掌握
Mar 16 Redis
使用Redis实现点赞取消点赞的详细代码
Mar 20 Redis
Redis 报错 error:NOAUTH Authentication required
May 15 Redis
Redis特殊数据类型HyperLogLog基数统计算法讲解
Jun 01 Redis
Redis keys命令的具体使用
Jun 05 Redis
Redis全局ID生成器的实现
Jun 05 Redis
Redis批量生成数据的实现
Jun 05 Redis
浅谈Redis变慢的原因及排查方法
Jun 21 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
一文搞懂Redis中String数据类型
Apr 03 #Redis
使用Redis做预定库存缓存功能
sentinel支持的redis高可用集群配置详解
redis sentinel监控高可用集群实现的配置步骤
redis调用二维码时的不断刷新排查分析
Apr 01 #Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
You might like
一个可以找出源代码中所有中文的工具
2006/10/25 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
php制作的简单验证码识别代码
2016/01/26 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
Yii框架日志记录Logging操作示例
2018/07/12 PHP
table对象中的insertRow与deleteRow使用示例
2014/01/26 Javascript
原生Javascript封装的一个AJAX函数分享
2014/10/11 Javascript
AngularJs 弹出模态框(model)
2016/04/07 Javascript
AngularJs  unit-testing(单元测试)详解
2016/09/02 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
JavaScript实现弹窗效果代码分析
2017/03/09 Javascript
微信小程序 功能函数小结(手机号验证*、密码验证*、获取验证码*)
2017/12/08 Javascript
小程序实现列表点赞功能
2018/11/02 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
Vue.js路由实现选项卡简单实例
2019/07/24 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
2019/09/10 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
《javascript设计模式》学习笔记五:Javascript面向对象程序设计工厂模式实例分析
2020/04/08 Javascript
vue实现简易图片左右旋转,上一张,下一张组件案例
2020/07/31 Javascript
Vue 使用iframe引用html页面实现vue和html页面方法的调用操作
2020/11/16 Javascript
轻松实现python搭建微信公众平台
2016/02/16 Python
解决Python运行文件出现out of memory框的问题
2018/12/03 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
HTML5 history新特性pushState、replaceState及两者的区别
2015/12/26 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
static全局变量与普通的全局变量有什么区别
2014/05/27 面试题
市场专员岗位职责
2014/02/14 职场文书
社会学专业求职信
2014/02/24 职场文书
2014年党员整改措施
2014/10/24 职场文书
先进基层党组织材料
2014/12/25 职场文书
担保书范本
2015/01/20 职场文书
成绩单家长意见
2015/06/03 职场文书
Golang中channel的原理解读(推荐)
2021/10/16 Golang