Redis生成任务编号
每天都会重头开始
环境:基于springBoot,redis
1. 导包
<!--redis启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.5.4</version>
</dependency>
2. 配置
spring:
redis:
# Redis服务器地址
host: localhost
# Redis服务器端口号
port: 6379
# 使用的数据库索引,默认是0
database: 0
# 连接超时时间
timeout: 1800000
# 设置密码
password: 123456
lettuce:
pool:
# 最大阻塞等待时间,负数表示没有限制
max-wait: -1
# 连接池中的最大空闲连接
max-idle: 5
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中最大连接数,负数表示没有限制
max-active: 20
3. Demo
@SpringBootTest
public class NumberTest {
/**
* redis流水号key
*/
private final static String REDIS_KEY = "testKey";
/**
* 流水号格式
*/
private final static String FORMAT_CODE = "0000";
@Autowired
private RedisTemplate redisTemplate;
/**
* 生成流水号
* 实际业务需要检查数据库是否存在
* @return
*/
public String nextValue() {
LocalDateTime now = LocalDateTime.now();
// 格式在这里定义
String pattern = "yyyyMMdd";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
String date = formatter.format(now);
DecimalFormat dft = new DecimalFormat(FORMAT_CODE);
//查询 key 是否存在, 不存在返回 1 ,存在的话则自增加1
Long count = redisTemplate.opsForValue().increment(REDIS_KEY, 1);
// 设置key过期时间, 保证每天的流水号从1开始
if (count == 1) {
redisTemplate.expire(REDIS_KEY, 86400, TimeUnit.SECONDS);
}
// 格式化为四位流水号
String code = dft.format(count);
// 最终结果
String result = date + code;
return result;
}
@Test
public void test(){
nextValue();
}
//测试结果: 202302110001
// 202302110002