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 13 Redis
Redis延迟队列和分布式延迟队列的简答实现
May 13 Redis
Redis集群的关闭与重启操作
Jul 07 Redis
redis requires ruby version2.2.2的解决方案
Jul 15 Redis
Redis做数据持久化的解决方案及底层原理
Jul 15 Redis
redis的list数据类型相关命令介绍及使用
Jan 18 Redis
Redis调用Lua脚本及使用场景快速掌握
Mar 16 Redis
redis调用二维码时的不断刷新排查分析
Apr 01 Redis
 Redis 串行生成顺序编码的方法实现
Apr 03 Redis
Redis 报错 error:NOAUTH Authentication required
May 15 Redis
Redis实现订单过期删除的方法步骤
Jun 05 Redis
Redis Lua脚本实现ip限流示例
Jul 15 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
一文搞懂Redis中String数据类型
Apr 03 #Redis
使用Redis做预定库存缓存功能
sentinel支持的redis高可用集群配置详解
redis sentinel监控高可用集群实现的配置步骤
redis调用二维码时的不断刷新排查分析
Apr 01 #Redis
基于Redis6.2.6版本部署Redis Cluster集群的问题
You might like
漫威DC即将合作联动,而双方早已经秘密开始
2020/04/09 欧美动漫
php 批量生成html,txt文件的实现代码
2013/06/26 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
在VS2008中使用jQuery智能感应的方法
2010/12/30 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
Node.js中child_process实现多进程
2015/02/03 Javascript
jquery显示loading图片直到网页加载完成的方法
2015/06/25 Javascript
js为什么不能正确处理小数运算?
2015/12/29 Javascript
jquery无法为动态生成的元素添加点击事件的解决方法(推荐)
2016/12/26 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
jquery实现淡入淡出轮播图效果
2020/12/13 jQuery
[02:36]DOTA2上海特锦赛 回忆电竞生涯的重要瞬间
2016/03/25 DOTA
python调用cmd复制文件代码分享
2013/12/27 Python
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
Python中IPYTHON入门实例
2015/05/11 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
在django view中给form传入参数的例子
2019/07/19 Python
python 五子棋如何获得鼠标点击坐标
2019/11/04 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
python cv2.resize函数high和width注意事项说明
2020/07/05 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
公司晚会主持词
2014/03/22 职场文书
政工例会汇报材料
2014/08/26 职场文书
个人收入证明模板
2014/09/18 职场文书
市委召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
mysql多表查询-笔记七
2021/04/05 MySQL
SpringBoot系列之MongoDB Aggregations用法详解
2022/02/12 MongoDB
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android