目标:在系统中按日历生成编号,如 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生成自增编号效果如图:

e14d3762e89b14f06bf5ddc4c735ba46.png

现在就完成了使用Redis生成自增编号的需求了,并且不用解决MySQL数据库的那些问题,最终把这个编号插入数据库即可!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐