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通过6379端口无法连接服务器(redis-server.exe闪退)
May 08 Redis
redis三种高可用方式部署的实现
May 11 Redis
你真的了解redis为什么要提供pipeline功能
Jun 22 Redis
redis使用不当导致应用卡死bug的过程解析
Jul 01 Redis
厉害!这是Redis可视化工具最全的横向评测
Jul 15 Redis
Redis入门教程详解
Aug 30 Redis
Redis 常见使用场景
Aug 30 Redis
SpringBoot集成Redis的思路详解
Oct 16 Redis
Redis实现主从复制方式(Master&Slave)
Jun 21 Redis
Redis+AOP+自定义注解实现限流
Jun 28 Redis
Redis sentinel哨兵集群的实现步骤
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
thinkphp浏览历史功能实现方法
2014/10/29 PHP
php中heredoc与nowdoc介绍
2014/12/25 PHP
php smtp实现发送邮件功能
2017/06/22 PHP
php如何比较两个浮点数是否相等详解
2019/02/12 PHP
对字符串进行HTML编码和解码的JavaScript函数
2010/02/01 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
JavaScript 七大技巧(一)
2015/12/13 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
js实现页面多个日期时间倒计时效果
2019/06/20 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
vue项目中播放rtmp视频文件流的方法
2020/09/17 Javascript
微信小程序自定义胶囊样式
2020/12/27 Javascript
[50:12]EG vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python中安装模块包版本冲突问题的解决
2017/05/02 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
python解释器安装教程的方法步骤
2020/07/02 Python
Python爬虫爬取新闻资讯案例详解
2020/07/14 Python
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
英国邮购活的植物主要供应商:Gardening Direct
2019/01/28 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
main 主函数执行完毕后,是否可能会再执行一段代码,给出说明
2012/12/05 面试题
英语师范专业毕业生自荐信
2013/09/21 职场文书
中医专业应届生求职信
2013/11/17 职场文书
影视制作岗位职责
2013/12/04 职场文书
优秀辅导员事迹材料
2014/02/16 职场文书
个人自查自纠材料
2014/10/14 职场文书
社区环境卫生倡议书
2015/04/29 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
开场白怎么写
2015/06/01 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python