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内存空间效率问题的深入探究
May 17 Redis
详解redis分布式锁的这些坑
May 19 Redis
Redis高级数据类型Hyperloglog、Bitmap的使用
May 24 Redis
Redis如何实现分布式锁
Aug 23 Redis
Redis RDB技术底层原理详解
Sep 04 Redis
CentOS8.4安装Redis6.2.6的详细过程
Nov 20 Redis
基于Redis zSet实现滑动窗口对短信进行防刷限流的问题
Feb 12 Redis
redis击穿 雪崩 穿透超详细解决方案梳理
Mar 17 Redis
Redis实现短信验证码登录的示例代码
Jun 14 Redis
Redis实现主从复制方式(Master&Slave)
Jun 21 Redis
Redis唯一ID生成器的实现
Jul 07 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
一文搞懂Redis中String数据类型
Apr 03 #Redis
使用Redis做预定库存缓存功能
sentinel支持的redis高可用集群配置详解
redis sentinel监控高可用集群实现的配置步骤
redis调用二维码时的不断刷新排查分析
Apr 01 #Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
You might like
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
Javascript处理DOM元素事件实现代码
2012/05/23 Javascript
struts2+jquery+json实现异步加载数据(自写)
2013/06/24 Javascript
如何在父窗口中得知window.open()出的子窗口关闭事件
2013/10/15 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
js实现数组冒泡排序、快速排序原理
2016/03/08 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
详解AngularJS中ng-src指令的使用
2016/09/07 Javascript
Vue 过渡(动画)transition组件案例详解
2017/01/22 Javascript
vue input 输入校验字母数字组合且长度小于30的实现代码
2018/05/16 Javascript
JavaScript禁用右键单击优缺点分析
2019/01/20 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
使用xampp将angular项目运行在web服务器的教程
2019/09/16 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
详解Python中的条件判断语句
2015/05/14 Python
python操作 hbase 数据的方法
2016/12/18 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
Python使用matplotlib实现绘制自定义图形功能示例
2018/01/18 Python
python opencv实现旋转矩形框裁减功能
2018/07/25 Python
python创建文件备份的脚本
2018/09/11 Python
Python脚本实现监听服务器的思路代码详解
2020/05/28 Python
python help函数实例用法
2020/12/06 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
阿迪达斯俄罗斯官方商城:adidas俄罗斯
2017/03/08 全球购物
印度尼西亚最大的电商平台:Tokopedia(印尼版淘宝)
2017/12/02 全球购物
Kate Spade澳大利亚官方网站:美国设计师手袋品牌
2019/09/10 全球购物
期末自我鉴定
2014/02/02 职场文书
婚纱摄影师求职信范文
2014/04/17 职场文书
空气环保标语
2014/06/12 职场文书