Redis实现生成快速订单(生成订单redis)
号
Redis作为一款优秀的内存型数据库,在各种场景下都能够发挥出自身的性能和优势。有时候,需要生成快速的订单号,而且保证全局唯一性,这时候Redis就能够发挥出自身的优势。
具体实现原理来看,可以使用Redis的incr实现自增的键值,也可以通过键名来设定全局唯一性,保证订单号的唯一性。具体可以定义一个IncOrderId,然后利用Redis的Key来执行incr操作:
public static Long incOrderId(){
//方法实现 Jedis jedis = JedisPoolUtil.getJedisInstance();
//通过key来实现唯一性 String orderId = jedis.incr("IncOrderId");
JedisPoolUtil.releaseJedis(jedis); return Long.parseLong(orderId);
}
当然,为了满足不同的场景,即使是唯一号也需要有简单的易懂机制。因此可以通过组合一些其他信息来生成订单号,比如前缀、时间戳或者特定的格式等:
public static String getOrderId(){
Long orderId = incOrderId(); String orderNo = String.format("DN%s",DateTimeUtil.getTimeMillisNoRandom() + orderId );
return orderNo;
}
如果觉得这种自增序号还不够快,不足以满足一些场景使用,那么在入参中,可以加入线程来控制增长,可以有效提高订单号的生成速度:
public static String getOrderId(){
int threadNo= Math.abs(Thread.currentThread().getName().hashCode()) % 16; Long orderId = incOrderId();
String orderNo = String.format("DN%s_%s",DateTimeUtil.getTimeMillisNoRandom() + orderId ,threadNo);
return orderNo; }
可以看到,通过Redis可以实现自增的唯一订单号,在一些场景下可以起到很好的效果。当然,还可以通过细究业务场景调整原理,以满足更多的场景需求!
相关文章