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 查看所有的key方式
May 07 Redis
深入浅析Redis 集群伸缩原理
May 15 Redis
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
May 21 Redis
redis实现排行榜功能
May 24 Redis
详解Redis瘦身指南
May 26 Redis
深入理解redis中multi与pipeline
Jun 02 Redis
redis不能访问本机真实ip地址的解决方案
Jul 07 Redis
Redis Cluster 集群搭建你会吗
Aug 04 Redis
基于Redis结合SpringBoot的秒杀案例详解
Oct 05 Redis
SpringBoot整合Redis入门之缓存数据的方法
Nov 17 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
Redis基本数据类型Set常用操作命令
Jun 01 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常用的缓存技术汇总
2014/05/05 PHP
PHP类中的魔术方法(Magic Method)简明总结
2014/07/08 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
PHP调用其他文件中的类
2018/04/02 PHP
实现JavaScript中继承的三种方式
2009/10/16 Javascript
jQuery Select(单选) 模拟插件 V1.3.62 改进版
2010/07/17 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
js实现按一下删除键删除整个单词附demo
2014/09/05 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(上)
2015/10/28 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
JavaScript类的写法
2016/09/17 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
jQuery插件echarts设置折线图中折线线条颜色和折线点颜色的方法
2017/03/03 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
微信小程序实现topBar底部选择栏效果
2018/07/20 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
Python3生成手写体数字方法
2018/01/30 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
TensorFlow2.X使用图片制作简单的数据集训练模型
2020/04/08 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
2020/04/22 Python
管理部部长岗位职责
2013/12/05 职场文书
小学生元旦广播稿
2014/02/21 职场文书
学习雷锋活动总结
2014/04/29 职场文书
我的教育故事演讲稿
2014/05/04 职场文书
优秀班主任经验交流材料
2014/06/02 职场文书
生日宴会家属答谢词
2015/09/29 职场文书
创业计划书之家教中心
2019/09/25 职场文书
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android
python如何查找列表中元素的位置
2022/05/30 Python