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 相关文章推荐
详解RedisTemplate下Redis分布式锁引发的系列问题
Apr 27 Redis
Redis IP地址的绑定的实现
May 08 Redis
解析Redis Cluster原理
Jun 21 Redis
了解Redis常见应用场景
Jun 23 Redis
redis使用不当导致应用卡死bug的过程解析
Jul 01 Redis
在redisCluster中模糊获取key方式
Jul 09 Redis
厉害!这是Redis可视化工具最全的横向评测
Jul 15 Redis
使用redis实现延迟通知功能(Redis过期键通知)
Sep 04 Redis
Redis 持久化 RDB 与 AOF的执行过程
Nov 07 Redis
高并发下Redis如何保持数据一致性(避免读后写)
Mar 18 Redis
解决 Redis 秒杀超卖场景的高并发
Apr 12 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
Zerg建筑一览
2020/03/14 星际争霸
解析PHP对现有搜索引擎的调用
2013/06/25 PHP
thinkphp配置文件路径的实现方法
2016/08/30 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
自己写的兼容ie和ff的在线文本编辑器类似ewebeditor
2012/12/12 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
什么是cookie?js手动创建和存储cookie
2014/05/27 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
真正好用的js验证上传文件大小的简单方法
2016/10/27 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
删除table表格行的实例讲解
2017/09/21 Javascript
nuxt框架中路由鉴权之Koa和Session的用法
2018/05/09 Javascript
python实现简易版计算器
2020/06/22 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
django框架两个使用模板实例
2019/12/11 Python
使用TensorFlow搭建一个全连接神经网络教程
2020/02/06 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
CSS3弹性布局内容对齐(justify-content)属性使用详解
2017/07/31 HTML / CSS
Myprotein中国网站:欧洲畅销运动营养品牌
2021/02/11 全球购物
管理部部长岗位职责
2013/12/05 职场文书
某同学的自我鉴定范文
2013/12/26 职场文书
校园安全检查制度
2014/02/03 职场文书
科级干部考察材料
2014/02/15 职场文书
售后服务承诺书范文
2014/03/26 职场文书
教师专业自荐信
2014/05/31 职场文书
大专生求职信
2014/06/29 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
查摆问题自查报告范文
2014/10/13 职场文书
2014年妇幼卫生工作总结
2014/12/09 职场文书
学术会议邀请函
2015/01/30 职场文书
指导老师鉴定意见
2015/06/05 职场文书