redis 生成流水工具类

使用redis存储流水号,代码如下:


import cn.hutool.core.date.DateUtil;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;


@Component
public class RedisSerialUtil {

	private RedisTemplate redisTemplate;

	public RedisSerialUtil(RedisTemplate redisTemplate) {
		this.redisTemplate = redisTemplate;
	}

	/**
	 * @param dateFormat: 日期格式 yyyyMMdd
	 * @param redisKeyPrefix: redis的key 自定义
	 * @param initialValue: 初始序列号
	 * @param delta: 自增步长
	 * @param formatSpecifier: 补全位数 %03d
	 * return String
	 * {@link String}
	 * @author Miki
	 * @date 2023-10-10
	 * @description 默认当天的流水
	 */
	public String generateCode(String dateFormat, String redisKeyPrefix, String initialValue, long delta, String formatSpecifier) {
		String serialCode = "";
		String today = DateUtil.today();
		String formatDate = DateUtil.format(DateUtil.parse(today), dateFormat);
		String redisKey = redisKeyPrefix.concat(formatDate);

		// 获取缓存数据
		Long redisValue = redisTemplate.opsForValue().increment(redisKey, delta);
		if (redisValue == null || redisValue.equals(delta)) {
			redisTemplate.opsForValue().set(redisKey, initialValue);
			serialCode = String.format(formatSpecifier, Integer.parseInt(initialValue));
		} else {
			serialCode = String.format(formatSpecifier, redisValue);
		}
		return serialCode;
	}
}

调用代码如下:

public class TestSerial{

    @Autowired
    private RedisTemplate redisTemplate;

    RedisSerialUtil redisSerialUtil = new RedisSerialUtil(redisTemplate);
    String dateFormat = "yyyyMMdd";
	String redisKeyPrefix = "redisKeyPrefix:";
	String formatSpecifier = "%03d";

		// 生成流水号
		String serialCode = redisSerialUtil.generateCode(dateFormat, redisKeyPrefix, "1", 1, formatSpecifier);

    // 返回的serialCode 为001,002,只有流水号
    // redis中的key = redisKeyPrefix + dateFormat ;value为流水号
    

}

你可能感兴趣的:(Java基础,数据库,工具,redis,数据库,缓存)