业务需求是每点击按钮产生一条新的单号,根据日期变化,每次新增1,组合格式为xx202307100001,其中xx为自定义前缀。
使用redis进行自增,设计代码如下
@Resource
private RedisTemplate<String,Object> redisTemplate;
/**
* 递增
* @param key 键
* @param factor 要增加几(大于0)
*/
public Long incremental(String key, long factor) {
if (factor < 0 ) {
throw new RuntimeException("递增因子必须大于0");
}
return redisTemplate.opsForValue().increment(key, factor);
}
/**
* 指定缓存失效时间
* @param key 键
* @param time 时间(秒)
*/
public boolean expire(String key, long time) {
try {
if (time > 0) {
redisTemplate.expire(key, time, TimeUnit.SECONDS);
}
return true;
} catch (Exception e) {
log.info("缓存异常:{}":e.printStackTrace());
return false;
}
}
/**
* 生成单号
* @param invalidTime 时间格式 yyyyMMdd 20230710
* @param incremental 自增大小数值 1
* @param billNoStart 起始数值 00000
* @param prefix 单号前缀 xx
**/
public String createId(String invalidTime, Long incremental,
String billNoStart, String prefix) {
DecimalFormat df = new DecimalFormat(billNoStart);
String format = df.format(incremental);
return prefix + invalidTime + format;
}
其中opsForValue()方法是操作字符串的方法,另外四种数据结构的操作分别是:
redisTemplate.opsForHash(); // 操作hash 散列
redisTemplate.opsForList(); // 操作list 列表
redisTemplate.opsForSet(); // 操作set 集合
redisTemplate.opsForZSet(); // 操作set 有序集合
详细的对五种数据结构的操作方法如下(非常的详细):
链接: RedisTemplate操作Redis