java的redis 实现递增编号,SpringBoot使用Redis按照日历生成自增编号
目标:在系统中按日历生成编号,如 202003070001刚开始,我想的是使用MySQL存起来就可以了,如果使用MySQL的话会需要以下步骤:(1)判断数据库中今天是否有编号(2)如果没有,那么使用0001,如果有,那么从查询到的今天最大的一位数字+1(3)然后再存入数据库这样一来二区,查询就两次,然后截取字符串,然后+1等等操作,感觉哪里不爽,而且直接对数据库频繁读、写,还会存在数据库锁的获取等
目标:在系统中按日历生成编号,如 202003070001
刚开始,我想的是使用MySQL存起来就可以了,如果使用MySQL的话会需要以下步骤:
(1)判断数据库中今天是否有编号
(2)如果没有,那么使用0001,如果有,那么从查询到的今天最大的一位数字+1
(3)然后再存入数据库
这样一来二区,查询就两次,然后截取字符串,然后+1等等操作,感觉哪里不爽,而且直接对数据库频繁读、写,还会存在数据库锁的获取等烦锁操作!
后来又想到直接数据库定义MySQL函数解决吧,经理直接给我一句话“最好不要在数据库写函数”,原因没说!
没办法,问题还是要解决!想到了Redis,Redis有一个方便的工具RedisAtomicLong!咋一眼看这个工具名称你就知道人家是原子性的!
Redis生成自增编号
首先,你的项目中需要先集成了Redis,这里你可以查看相关文章SpringBoot集成Redis
生成自增编号@SpringBootTest
class RedisDemoApplicationTests {
@Autowired
private StringRedisTemplate redisTemplate;
@Test
public void contextLoads() {
RedisAtomicLong entityIdCounter
= new RedisAtomicLong("key.testNumber", redisTemplate.getConnectionFactory());
entityIdCounter.expire(1, TimeUnit.DAYS);
for (int i = 0; i < 10; i++) {
Long counter = entityIdCounter.incrementAndGet();
DecimalFormat format=new DecimalFormat("0000");
System.out.println("20200307"+format.format(counter));
}
}
}
DecimalFormat:把数字格式化为4位数
incrementAndGet:自增+1然后返回。
TimeUnit.DAYS:每天重置一次,这里就达到了我们想要的每天编号从0开始
Redis生成自增编号效果如图:
现在就完成了使用Redis生成自增编号的需求了,并且不用解决MySQL数据库的那些问题,最终把这个编号插入数据库即可!
更多推荐
所有评论(0)