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可以实现自增的唯一订单号,在一些场景下可以起到很好的效果。当然,还可以通过细究业务场景调整原理,以满足更多的场景需求!


数据运维技术 » Redis实现生成快速订单(生成订单redis)