基于redis的订单号生成方案
目前,比较火的nosql数据库,如MongoDB,Redis,Riak都提供了类似incr原子行操作。
下面是PHP版的一种实现方式:
<?php
/**
* 基于Redis的全局订单号id
*
* @author liujingyu
* @copyright liujingyu, 11 八月, 2014
**/ class OrdersnumAction { private $_r;
private $_host;
private $_port;
private $_passwd;
private $_prefix;
private $_len; function __construct() { try { $redisconfig = array(
'host'=>'xx.x.xx.x',
'port'=>6379,
'password'=>'xxxxxxxxxxxxxx',
'prefix'=>'order_num',
'len'=>6,
); $this->setBuilder($redisconfig); $this->_r = new redis;
$ret = $this->_r->connect($this->_host, $this->_port);
if (!$ret) {
die("[redis connect error]");
}
$this->_r->auth($this->_passwd);
}
catch (Exception $e) {
trace($e->getMessage());
}
} private function setBuilder($redisconfig) { $this->_host = $redisconfig['host'];
$this->_port = $redisconfig['port'];
$this->_passwd = $redisconfig['password'];
$this->_prefix = $redisconfig['prefix'];
$this->_len = $redisconfig['len'];
} /**
* 生成当天全局唯一自增id
*
* @param integer $key
*
* @return $id
* @author liujingyu
**/
private function nextId($key) {
$id = $this->_r->incr($this->_prefix.":".$key);
$l = strlen($id);
if ($l>$this->_len) {
return $id;
} else {
return str_repeat(0, $this->_len-$l).$id;
}
} /**
* 获取订单号
*
* @return integer
* @author liujingyu
**/
public function getOrdersNum() { $key = date('ymd', time());
return $key.$this->nextId($key);
}
}
采用的Redis中incr原子操作,并发量7w(单机,2核,2GB,centos6.5)。
类似天猫双十一这样的电商,提高并发量采用Redis list类型预生成,hash取模分散到多个实例中。进而达到无限扩展容。
基于redis的订单号生成方案的更多相关文章
- 一种基于Orleans的分布式Id生成方案
基于Orleans的分布式Id生成方案,因Orleans的单实例.单线程模型,让这种实现变的简单,贴出一种实现,欢迎大家提出意见 public interface ISequenceNoGenerat ...
- Java订单号生成,唯一订单号(日均千万级别不重复)
Java订单号生成,唯一订单号 相信大家都可以搜索到很多的订单的生成方式,不懂的直接百度.. 1.订单号需要具备以下几个特点. 1.1 全站唯一性. 1.2 最好可读性. 1.3 随机性,不能重复,同 ...
- 偶尔在网上看到的,相对比较好的c#端订单号生成规则
偶尔在网上看到的,相对比较好的c#端订单号生成规则 public class BillNumberBuilder{ private static object locker = new obj ...
- 全局唯一订单号生成方法(参考snowflake)
backgroud Snowflake is a network service for generating unique ID numbers at high scale with some si ...
- 订单号生成逻辑,C#和JAVA双版
五年没写过博客了,倒是天天在看 转来转去,又转回技术 原来一直在使用微软爸爸的东西,最近一两年开始玩android,玩java,还有PostgreSQL 都有些应用了,倒是可以整理些随笔出来,这就是其 ...
- 基于redis的分布式锁实现方案--redisson
实例代码地址,请前往:https://gitee.com/GuoqingLee/distributed-seckill redis官方文档地址,请前往:http://www.redis.cn/topi ...
- 基于mysql的单据号生成(前缀+日期+自增id+后缀)
介绍 本次采用mysql处理,性能不是很好,对于高并发有要求的建议不要采用公司一个小项目,需要生成一个单据号,格式为: 日期 + 每日重新自增号,自己考虑了一下每日自增需要考虑并发和持久问题,两种数据 ...
- 基于redis 实现分布式锁的方案
在电商项目中,经常有秒杀这样的活动促销,在并发访问下,很容易出现上述问题.如果在库存操作上,加锁就可以避免库存卖超的问题.分布式锁使分布式系统之间同步访问共享资源的一种方式 基于redis实现分布式锁 ...
- 业务订单号生成算法,每秒50W左右,不同机器保证不重复,包含日期可读性好
参考snowflace算法,基本思路: 序列12位(更格式化的输出后,性能损耗导致每毫秒生成不了这么多,所以可以考虑减少这里的位,不过留着也并无影响) 机器位10位 毫秒为左移 22位 上述几个做或运 ...
随机推荐
- 干货来啦。Flask框架看这一篇就够了,关注不迷路,Jeff带你看源码。开发技术时时更新
目录 一.初识Flask 1.1 什么是flask? 1.2 为什么要有flask? 二.Flask快速启动 三.Flask四剑客 三.flask的配置文件 可以配置的属性 四.flask路由 4.1 ...
- onOK Modal.warning iview 要写一个函数 套上,不然会得不到异步调用,直接弹出的时候就执行了
export const warning = (str, callback = _ => {}, outCallback = () => {}) => { Modal.warning ...
- vscode style内置auto会导致eslint格式化 对不齐报错
"files.associations": { "*.vue": "vue", // "*.js": "jav ...
- WPF 启动缓慢问题
Actually there's 2 main reasons that the default project type for WPF applications is x86. Intellitr ...
- SpringBoot源码分析(一)@SpringBootApplication解析
@SpringBootApplication解析 三层注解 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan(exclu ...
- 6个出色的Kubernetes发行版,哪款最适合你?
作者简介 Christopher Tozzi,自2008年来以自由职业者的身份对Linux.虚拟化.容器.数据存储及其相关主题进行报道. 本文来自Rancher Labs 时至今日,通过Kuberne ...
- ASP.NET动态网站课程设计——个人网页
时光荏苒,岁月如梭,又是学期期末时,没错,我又来补课程设计了,hhh. 本文主要讲述如何在用H5+CSS3写的静态网站的基础上,结合ASP.NET动态网站开发,制作一个动态的个人网页. 首先需要熟悉一 ...
- BIT-Reverse Pairs
2019-12-17 11:07:02 问题描述: 问题求解: 本题可以看作是逆序数问题的强化版本,需要注意的是num[i] > 2 * num[j],这里有0和负数的情况. public in ...
- Oracle数据库开机自启动的配置
如果服务器断电重启或计划内重启,在服务器的操作系统启动后,需要手工启动数据库实例和监听,本文介绍如何把Oracle数据库的启动和关闭配置成系统服务,在操作系统启动/关闭时,自动启动/关闭Oracle实 ...
- 一份精简的Numpy使用指引(附python演练)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! Numpy 的主要用途是以数组的形式进行数据操作. 机器学习中大多 ...