您的位置:首页 > 娱乐 > 明星 > 企业策划是什么意思_主流跨境电商平台有哪些?_西点培训_营销策略有哪些方面

企业策划是什么意思_主流跨境电商平台有哪些?_西点培训_营销策略有哪些方面

2025/4/26 13:19:52 来源:https://blog.csdn.net/weixin_43735471/article/details/147088325  浏览:    关键词:企业策划是什么意思_主流跨境电商平台有哪些?_西点培训_营销策略有哪些方面
企业策划是什么意思_主流跨境电商平台有哪些?_西点培训_营销策略有哪些方面

业务需求:创建一个流水号,

功能说明:

1,格式:orgCode + yyyyMMdd + 4位序号,
2,每天重新从 0001 开始
3,使用 Redisson 保证并发下分布式唯一,
4,Redis 存储当天序列号

示例代码

  1. Maven 依赖(如果还没加 Redisson):
<dependency><groupId>org.redisson</groupId><artifactId>redisson</artifactId><version>3.17.7</version>
</dependency>
  1. 配置 RedissonClient(示例单节点):
@Configuration
public class RedissonConfig {@Beanpublic RedissonClient redissonClient() {Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379") // 修改为你自己的 Redis 地址.setDatabase(0);return Redisson.create(config);}
}
  1. 流水号工具类:
@Component
public class SerialNumberGenerator {@Autowiredprivate RedissonClient redissonClient;private static final String SERIAL_KEY_PREFIX = "serial:";public String generateSerialNumber(String orgCode) {String currentDate = new SimpleDateFormat("yyyyMMdd").format(new Date());String key = SERIAL_KEY_PREFIX + currentDate;String lockKey = "lock:serial:" + currentDate;RLock lock = redissonClient.getLock(lockKey);try {// 获取锁,最多等待5秒,锁自动释放时间为10秒if (lock.tryLock(5, 10, TimeUnit.SECONDS)) {RAtomicLong counter = redissonClient.getAtomicLong(key);// 如果是新的一天,重置为0if (!counter.isExists()) {counter.set(0);// 设置过期时间为2天,避免key一直存在counter.expire(2, TimeUnit.DAYS);}long serial = counter.incrementAndGet();String formattedSerial = String.format("%04d", serial);return orgCode + currentDate + formattedSerial;} else {throw new RuntimeException("生成流水号失败:获取锁超时");}} catch (InterruptedException e) {throw new RuntimeException("生成流水号失败:线程中断", e);} finally {if (lock.isHeldByCurrentThread()) {lock.unlock();}}}
}

为什么需要 Redis 分布式锁?
不加锁的问题
Redis 是高并发环境下的共享存储,多个实例并发 get + set 操作有可能导致并发写丢失或重复编号。
加锁保证:每次生成编号时只有一个线程在操作该 key 的值,从而保证原子性和唯一性
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com