生成履行行行号及RedisTemplate使用碰坑


title: 生成履行行行号及RedisTemplate使用碰坑
date: 2020-10-24 13:40
updated: 2020-10-24 13:30
categories:

  • 搬砖笔记
  • java

tags:

  • java
  • redis

大致实现逻辑

后台写一个通用方法,参数为履行合同业务类型和公司代码,返回值为16位的履行行行号。

  • 生成规则:履行合同业务类型1位+公司代码4位+年份2位+流水号9位(每个公司每年的流水号都从1开始)。例如:1 0021 20 000000001。
  • 用子项目编码+公司代码+年份做Redis键,值为流水号。
  • 流水号:由于直接用java代码生成在集群环境会有问题,故采用redisTemplate的increment(key,delta)方法生成,初次调用该方法会返回1。
  • 格式化:redis返回的是自增的数字,需要格式化为9位流水号。java代码如下:
     String.format("%09d",serialNumber);

RedisTemplate使用碰坑

redisTemplate. opsForValue(). set(key,value)这种方式存入Redis后会把数字型的值转为字符串,以后调用increment(key,delta)方法报错。原因是底层采用了JdkSerializationRedisSerializer序列化机制。解决方法有如下两种:

  • 采用序列化方式
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());

赋值方法也要改(值为字符串),例如:

redisTemplate. opsForValue().set(key,"0")
  • 使用StringRedisTemplate
Long serialNumber = stringRedisTemplate. opsForValue().increment(key,1);
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页