如何通过Redis高效生成订单编号?

更新于
2026-09-26 05:58:54
1阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计217个文字,预计阅读时间需要1分钟。

如何通过Redis高效生成订单编号?

没有收到正确回复,错误已删除,以下给出正确的代码示例:

PHP[代码][PHP]// 使用redis的setnx确保高并发情况下的唯一性// 每秒生成999个for ($i=0; $i redis->setnx('unique_key', $i)) { // 成功设置唯一值 echo Unique value set: . $i . \n; } else { // 键已存在,重试 $i--; }}

没有收到正确回复, 错误的已删, 下面给出正确的~
代码中的$this->store等于一个redis的连接,主要用到redis的setnx来保证高并发情况下的唯一性,这里限制每秒生成999个.

1.[代码][PHP]代码

class Pay extends Web { /** * 最多以每秒999个的速度生成13位订单号 * * @return string */ function getOrderId() { //哪年,哪天,哪一秒 $base = date('y') . date('z') . str_pad((date('H') * 60 * 60 + date('i') * 60 + date('s')), 5, 0, STR_PAD_LEFT); $next_sec = time() + 1; $pre_max_id = 999; while(time() < $next_sec) { $order_id = mt_rand(1, $pre_max_id); $store_key = parent::getCacheKey('orderIdCache', $base, $order_id); $setRet = $this->store->setnx($store_key, 1); if ($setRet) { $this->store->expire($store_key, 5); return $base.str_pad($order_id, 3, 0, STR_PAD_LEFT); } else { continue; } } return $this->getOrderId(); } }

如何通过Redis高效生成订单编号?

本文共计217个文字,预计阅读时间需要1分钟。

如何通过Redis高效生成订单编号?

没有收到正确回复,错误已删除,以下给出正确的代码示例:

PHP[代码][PHP]// 使用redis的setnx确保高并发情况下的唯一性// 每秒生成999个for ($i=0; $i redis->setnx('unique_key', $i)) { // 成功设置唯一值 echo Unique value set: . $i . \n; } else { // 键已存在,重试 $i--; }}

没有收到正确回复, 错误的已删, 下面给出正确的~
代码中的$this->store等于一个redis的连接,主要用到redis的setnx来保证高并发情况下的唯一性,这里限制每秒生成999个.

1.[代码][PHP]代码

class Pay extends Web { /** * 最多以每秒999个的速度生成13位订单号 * * @return string */ function getOrderId() { //哪年,哪天,哪一秒 $base = date('y') . date('z') . str_pad((date('H') * 60 * 60 + date('i') * 60 + date('s')), 5, 0, STR_PAD_LEFT); $next_sec = time() + 1; $pre_max_id = 999; while(time() < $next_sec) { $order_id = mt_rand(1, $pre_max_id); $store_key = parent::getCacheKey('orderIdCache', $base, $order_id); $setRet = $this->store->setnx($store_key, 1); if ($setRet) { $this->store->expire($store_key, 5); return $base.str_pad($order_id, 3, 0, STR_PAD_LEFT); } else { continue; } } return $this->getOrderId(); } }

如何通过Redis高效生成订单编号?