/**
* 通过Redis的自增来控制编号的自增
* @param key 区分类型的主key,日期会连在这个key后面
* @return 生成的编码
*/
private String generateSn(String key){
String timeStr = DateUtil.toString(new Date(),"yyyyMMdd");
//组合出当天的Key
String redisKey = key+"_"+timeStr;
//用当天的时间进行自增
Long snCount=stringRedisTemplate.opsForValue().increment(redisKey,1);
String sn ;
//预计每天订单不超过1百万单
int num = 1000000;
if( snCount < num){
sn = "000000" + snCount;
// 让 0 前移操作
sn = sn.substring(sn.length()-6,sn.length());
}else{
sn = String.valueOf(snCount);
}
sn=timeStr+sn;
return sn;
}
boolean lock = cache.lock(buyer.getUid().toString(),15000);
if (!lock){
throw new ServiceException(TradeErrorCode.E456.code(), "订单创建出现错误,请稍后重试!");
}
// 在外面再加个分布式锁就可以控制集群了
cache.unLock(buyer.getUid().toString());
@Override
public void cleanCache() {
Date yesterday = getYesterday();
String timeStr = DateUtil.toString(yesterday,"yyyyMMdd");
stringRedisTemplate.delete(CachePrefix.TRADE_SN_CACHE_PREFIX.getPrefix()+"_"+timeStr);
stringRedisTemplate.delete(CachePrefix.ORDER_SN_CACHE_PREFIX.getPrefix()+"_"+timeStr);
}
自然讲 每天要清空昨日的