zoukankan      html  css  js  c++  java
  • PHP + Redis 生成自定义订单编号

    /**
     * 订单编号生成规则
     * 14位 = 6位时间 + 5位自增 + 3位ID
     * @param string $prefix    前缀: 默认为order
     * @param int    $userId    用户ID: 默认为1
     * @param int    $startTime 开始的日期时间戳: 默认为0
     * @param int    $expiredAt 有效期: 默认为永久
     * @return string
     */
    public function getRedisOrderNum($prefix = 'order', $userId = 1, $startTime = 0, $expiredAt = 0)
    {
    	// 6位日期
    	$date = date('ymd', time()); // 200909
    	// 开始的日期不是0
    	if ($startTime != 0) {
    		// 将6位时间变为距离开始日期的天数
    		$dayNum = 1 + ceil((time() - $startTime) / (60 * 60 * 24));
    		$date = $dayNum + 100000;
    	}
    	// 用户ID后3位
    	$userId = str_pad($userId, 3, 0, STR_PAD_LEFT);
    	$userNum = substr($userId, -3);
    	// 5位自增
    	$redisNum = Redis::incr("$prefix:$date:$userNum");
    	if ($redisNum == 1) {
    		$redisNum = 10000;
    		if ($expiredAt == 0) {
    			Redis::set("$prefix:$date:$userNum", $redisNum);
    		} else {
    			Redis::setex("$prefix:$date:$userNum", $expiredAt, $redisNum);
    		}
    	}
    	// 6位日期 + 5位自增数 + 用户ID后3位
    	return $date . $redisNum . $userNum;
    }
    
  • 相关阅读:
    转Vtype扩展
    Can't connect to MySQL server on 'ip' (13)
    观察者+js 模式
    (转)ASP.NET架构分析
    sql得到时间
    Js+XML 操作 (转)
    js中的math对象
    property和attribute的区别
    CSS样式定义
    linux 开启 mount
  • 原文地址:https://www.cnblogs.com/laowenBlog/p/13644148.html
Copyright © 2011-2022 走看看