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

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Redis实现生成快速订单(生成订单redis)》
文章链接:https://zhuji.vsping.com/166041.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。