/**
* 订单编号生成规则
* 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;
}

PHP + Redis 生成自定义订单编号的更多相关文章

  1. 基于 Redis 生成分布式订单号

    环境依赖: //spingBoot <version>2.6.6</version> //jdk11 <dependency> <groupId>org ...

  2. 编写Java程序,模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号。

    查看本章节 查看作业目录 需求说明: 模拟网上商城购物,当用户选好物品提交订单时,每笔订单会自动生成一个唯一的订单编号.而部分电子商务网站在数据高峰期时,一毫秒可能需要处理近千笔的订单 现在简单模拟 ...

  3. java生成订单编号

    随着项目用户数量的扩大,高并发随之而来.那么如何在当前系统生成唯一编号呢? 一台数据库可以用自增,集群呢?当然也有随之的解决方案,但是最好的还是在项目生成了唯一的编号再插入到数据库.而不是数据库插入了 ...

  4. .NET ORM框架HiSql实战-第三章-使用自定义编号生成【申请编号】

    一.引言 上一篇.NET ORM框架HiSql实战-第二章-使用Hisql实现菜单管理(增删改查) 中菜单编号采用的是雪花ID,生成的编号无法自定义.比如本系统的一个申请业务,需要按前缀+日期+流水号 ...

  5. Loadrunner时间函数、用时间生成订单编号例子

    Loadrunner中取时间函数.用时间函数生成订单编号例子: <如要转载,请注明网络来源及作者:Cheers_Lee> 问题的提出: (1)有时候在Loadrunner中用C语言设计脚本 ...

  6. 分布式系统-主键唯一id,订单编号生成-雪花算法-SnowFlake

    分布式系统下 我们每台设备(分布式系统-独立的应用空间-或者docker环境) * SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和机器ID作 ...

  7. magento 自定义订单前缀或订单起始编号

    在magento里订单的起始号是从1000000001开始的,但有时你可能需要自定义该值的起始号如从20000000000开始 在Google上搜索了一番找到以下代码并完美解决问题,以此记录希望帮助其 ...

  8. JAVA生成订单编号工具类

    JAVA根据时间戳和随机数方式生成订单编号工具类 OrderUtils.java package com.util; import java.text.DateFormat; import java. ...

  9. C# 根据自定义线程定时器 生成随机订单

    这个源之于一个朋友问我的一个问题,他说他们的需求是在一天之内随机抽取数据生成订单,还不能让客户看出来. 随机生成的订单还分概率抽取不一定的状态值,那么根据我之前写的定时器线程执行器,我们设计需要一个定 ...

随机推荐

  1. java_Scanner类、Random类、ArrayList 类的使用

    Scanner类 一个可以解析基本类型和字符串的简单文本扫描器. 例如,以下代码使用户能够从 System.in 中读取一个数: Scanner in=new Scanner(System.in); ...

  2. 2020-04-18:synchronized和reentrantLock的异同

    福哥答案2020-04-19:采纳群员答案: 1 synchronized是关键字,reentrantlock是类,API层面的2 前者是通过monitor来实现锁机制,后者是基于AQS实现的,通过内 ...

  3. C#设计模式之1-工厂方法模式

    工厂方法模式(Factory Method Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/389 访问 ...

  4. 解决@ResponseBody不能和 <mvc:annotation-driven>同时使用的问题

    我们都知道使用Springmvc的ajax很强大只要三步就可以实现: 1.引入jackson的maven到pom文件: <dependency> <groupId>com.fa ...

  5. springboot中RedisTemplate的使用

    springboot中RedisTemplate的使用 参考 了解 Redis 并在 Spring Boot 项目中使用 Redis--以IBM为学习模板 springboot之使用redistemp ...

  6. 【POJ2723】Get Luffy Out - 二分+2-SAT

    题面描述 Ratish is a young man who always dreams of being a hero. One day his friend Luffy was caught by ...

  7. Golang笔记整理--第二天

    一. 标识符 Go语言标识符构成规则:开头第一个字符必须是字母或者是下划线,后面可以跟任意多个字符,数子或者下划线,并且区分大小写. 例: _aa11 //合法标识符 aa11 //合法标识符 _aa ...

  8. unity探索者之复制内容到剪贴板

    版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/8417014.html unity中提供的TextEditor类,只能在window ...

  9. eclipse及idea使用问题记录(为了方便github同步,重新用Markdown写了一篇)

    使用eclipse或idea的时候会遇到各式各样的小问题,解决方案其实网上也大都搜得到,但是下次遇到的时候总是想不起来如何解决,还要花费时间再次查资料.所以以后把遇到的问题都记录一下. @ 目录 Ec ...

  10. Swing记事本项目

    具备记事本功能:文件保存.文件打开.复制.黏贴.撤销.全选.字体修改.字体颜色修改.背景颜色修改