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 Cluster 字段模糊匹配及删除
May 27 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
redis客户端实现高可用读写分离的方式详解
Jul 04 Redis
浅谈redis整数集为什么不能降级
Jul 25 Redis
Redis RDB技术底层原理详解
Sep 04 Redis
详解Redis在SpringBoot工程中的综合应用
Oct 16 Redis
Redis 持久化 RDB 与 AOF的执行过程
Nov 07 Redis
redis数据结构之压缩列表
Mar 21 Redis
Redis如何使用乐观锁(CAS)保证数据一致性
Mar 25 Redis
sentinel支持的redis高可用集群配置详解
Apr 01 Redis
Redis基本数据类型Zset有序集合常用操作
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/06/02 PHP
用户注册常用javascript代码
2009/08/29 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
2011/11/02 Javascript
js编码之encodeURIComponent使用介绍(asp,php)
2012/03/01 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
js仿苹果iwatch外观的计时器代码分享
2015/08/26 Javascript
JS实现模拟百度搜索“2012世界末日”网页地震撕裂效果代码
2015/10/31 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
node.js版本管理工具n无效的原理和解决方法
2016/11/24 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
将angular.js项目整合到.net mvc中的方法详解
2017/06/29 Javascript
Bootstrap 模态框(Modal)带参数传值实例
2017/08/20 Javascript
详解Js中的模块化是如何实现的
2017/10/18 Javascript
swiper插件自定义切换箭头按钮
2017/12/28 Javascript
关闭Vue计算属性自带的缓存功能方法
2018/03/02 Javascript
babel7.x和webpack4.x配置vue项目的方法步骤
2019/05/12 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
Python中的urllib模块使用详解
2015/07/07 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
python解压zip包中文乱码解决方法
2020/11/27 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
详解HTML5中CSS外观属性
2020/09/10 HTML / CSS
英国运动风奢侈品购物网站:Maison De Fashion
2020/08/28 全球购物
如何提高SQL Server的安全性
2016/07/25 面试题
教育科研先进个人材料
2014/01/26 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
如何写一封打动人心的求职信
2014/02/17 职场文书
2014年乡镇民政工作总结
2014/12/02 职场文书
司考复习计划
2015/01/19 职场文书
三孔导游词
2015/02/05 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android