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 sentinel 频繁主备切换的问题
Apr 12 Redis
Redis数据结构之链表与字典的使用
May 11 Redis
redis内存空间效率问题的深入探究
May 17 Redis
详解Redis基本命令与使用场景
Jun 01 Redis
了解Redis常见应用场景
Jun 23 Redis
Redis集群的关闭与重启操作
Jul 07 Redis
Redis分布式锁Redlock的实现
Aug 07 Redis
Redis 常见使用场景
Aug 30 Redis
redis缓存存储Session原理机制
Nov 20 Redis
Redis命令处理过程源码解析
Feb 12 Redis
解决redis批量删除key值的问题
Mar 23 Redis
浅谈Redis的事件驱动模型
May 30 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 超链接 抓取实现代码
2009/06/29 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
2011/01/27 PHP
php实现图片缩略图的方法
2016/03/29 PHP
php如何把表单内容提交到数据库
2019/07/08 PHP
js CSS操作方法集合
2008/10/31 Javascript
javascript显示选择目录对话框的代码
2008/11/10 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
js实现图片无缝滚动
2015/12/23 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
原生javascript实现图片无缝滚动效果
2016/02/12 Javascript
JS未跨域操作iframe里的DOM
2016/06/01 Javascript
JS跨域交互(jQuery+php)之jsonp使用心得
2016/07/01 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
jQuery Ajax File Upload实例源码
2016/12/12 Javascript
Bootstrap导航条的使用和理解3
2016/12/14 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
AngularJS 单选框及多选框的双向动态绑定
2017/04/20 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
JS 实现获取验证码 倒计时功能
2018/10/29 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
[01:06:07]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS CIS
2014/05/22 DOTA
Python检测字符串中是否包含某字符集合中的字符
2015/05/21 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
Python自定义线程类简单示例
2018/03/23 Python
Python键盘输入转换为列表的实例
2018/06/23 Python
Python3数字求和的实例
2019/02/19 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
工商治理实习生的自我评价分享
2014/02/20 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
Spring Boot 实现 WebSocket
2022/04/30 Java/Android
MySQL 逻辑备份 into outfile
2022/05/15 MySQL