?Redis 串行生成顺序编码的方法实现
更新时间:2022年04月03日 10:23:48 作者:这个杀手冷死了
本文主要介绍了?Redis 串行生成顺序编码的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud)
(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun)
场景:针对于分布式并发环境,易出现编码生成重复问题
方案特点:串行操作可避免阻塞加锁,处理效率更高
具体解决方案
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 串行生成顺序编码内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!
您可能感兴趣的文章:
相关文章
如何在centos中安装redis插件bloom-filter
布隆过滤器在第一次add的时候自动创建基于默认参数的过滤器,Redis还提供了自定义参数的布隆过滤器,下面这篇文章主要给大家介绍了关于如何在centos中安装redis插件bloom-filter的相关资料,需要的朋友可以参考下2021-11-11
最新评论