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 IP地址的绑定的实现
May 08 Redis
redis 限制内存使用大小的实现
May 08 Redis
基于Redis延迟队列的实现代码
May 13 Redis
Windows下redis下载、redis安装及使用教程
Jun 02 Redis
Redis缓存-序列化对象存储乱码问题的解决
Jun 21 Redis
压缩Redis里的字符串大对象操作
Jun 23 Redis
Redis集群新增、删除节点以及动态增加内存的方法
Sep 04 Redis
浅谈Redis的keys命令到底有多慢
Oct 05 Redis
详解Redis的三种常用的缓存读写策略步骤
May 06 Redis
Redis基本数据类型Zset有序集合常用操作
Jun 01 Redis
Redis入门基础常用操作命令整理
Jun 01 Redis
python中使用redis用法详解
Dec 24 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验证码类代码分享(已封装成类)
2011/07/17 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
2013/06/24 PHP
PHP获取时间排除周六、周日的两个方法
2014/06/30 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
浅谈php中fopen不能创建中文文件名文件的问题
2017/02/06 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
Laravel给生产环境添加监听事件(SQL日志监听)
2017/06/19 PHP
PHP多进程编程之僵尸进程问题的理解
2017/10/15 PHP
Prototype中dom对象方法汇总
2008/09/17 Javascript
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
js读取csv文件并使用json显示出来
2015/01/09 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
React实现全选功能
2020/08/25 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
详解Python中的装饰器、闭包和functools的教程
2015/04/02 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
python中利用xml.dom模块解析xml的方法教程
2017/05/24 Python
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
Python学习笔记之视频人脸检测识别实例教程
2019/03/06 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
Python实现TCP通信的示例代码
2019/09/09 Python
莫斯科的韩国化妆品店:Sifo
2019/12/04 全球购物
2014年个人工作总结报告
2014/11/27 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
新农村建设指导员工作总结
2015/08/13 职场文书
教你用Python+selenium搭建自动化测试环境
2021/06/18 Python
利用python进行数据加载
2021/06/20 Python