package com.zt.util; import redis.clients.jedis.Jedis; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class OrderId { private static final String REDIS_HOST = "localhost"; private static final int REDIS_PORT = 6379; private static final String ORDER_KEY_PREFIX = "order:counter:"; private static final int ORDER_SEQ_LENGTH = 5; public static void main(String[] args) { String orderNumber = generateOrderNumber("ORD"); String orderNumber2 = generateOrderNumber("ORD"); System.out.println("生成的订单号: " + orderNumber); System.out.println("生成的订单号: " + orderNumber2); } public static String generateOrderNumber(String prefix) { Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT); // 获取当前日期,格式化为yyMMdd String datePart = LocalDateTime.now() .format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")); // Redis键名,按日期分隔计数器 String redisKey = ORDER_KEY_PREFIX + datePart; // 原子递增并获取序列号 long seq = jedis.incr(redisKey); // 格式化序列号,不足长度时前补零 String seqPart = String.format("%0" + ORDER_SEQ_LENGTH + "d", seq); // 组合完整订单号: 前缀+日期+序列号 return prefix + datePart + seqPart; } }