关于订单号的生成

2015-08-14 13:03:02 查看评论 1816 人阅读    

最近面试某公司的时候被问到这个,一开始想法是以流水叠加的方式,借助redis的incr生成一个流水订单号,可以增加前缀。如:2015081400001,后面五位数进行递增。


面试官:如果不想让别人根据订单号来统计流水呢。

这时候第一想法是每日定时生成一批订单,然后存放在redis/mysql,使用的时候进行获取即可。但是仍然无法解决随机获取的问题,随机key的话又要考虑互斥问题。所以想到使用incr的进行random 1-5之间的递增。然后以index去获取order id。


面试官:如果要保证这批订单号都能使用上呢。

对于最后的这个问题当时并没有答得出来。

之后问了下面试官,答题是跟我的思路类似,也是使用incr做index,当时没有想明白。因为按照好我的方式话保证不了随机获取,而且所有的订单号都能获取到。

==================================================================================================

晚上回来之后突然想到,其实思路没问题的,只是纠结在存在redis/mysql是顺序生成的订单号,所以获取的时候也只能顺序获取。mysql倒是有rand()函数,但是性能不好,而且会导致索引失效。 但其实可以生成订单号的时候程序可以进行打乱这批订单号再存储!这样就可以解决这个问题了。

直接上代码

<?php
// 每日生成的最大订单流水号, 可以根据实际应用进行调整
define('NUM', 1000);

// 链接redis
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$order = null;
$pre = date('Ymd');

// 生成订单流水数组
$arr = range(0, NUM);

// 数组乱序
shuffle($arr);

$redis->delete('order');

// 插入订单号进入redis
foreach ($arr as $i) {
    $order = $pre . str_pad($i, 5, 0, STR_PAD_LEFT);
    $redis->rPush('order', $order);
}


// 获取订单号
$orders = [];
for($i = 0; $i < 10000; $i++) {
    $orders[] = $redis->lPop('order');
}
var_dump($orders);



分类: 随笔 标签: 订单号生成

博客小升级

2014-07-11 12:10:24 查看评论 795 人阅读    

1405059858.png

博客在线编辑器终于支持上传功能了,赞一个!

目前还没发现支持golang后台上传的在线编辑器,所以只能自己动手了。

经过两个晚上终于把Ueditor的上传功能给弄好了。

分类: 随笔 标签: golang Ueditor

Sublime Text3 + Golang搭建开发环境

2014-05-09 11:07:47 查看评论 19638 人阅读    

        本次安装是基于win8 x64系统,sublime text3,Golang1.4.2。


1.安装git

    因为golang是通过git来管理远程包的,所以我们首先要安装git,下载地址:http://www.git-scm.com/download/

git安装比较简单,直接下一步即可(在Windows Explorer integration选项中将“Git Bash here”和“Git GUI here”打对勾),需要了解具体安装的可以看这里



2.安装Golang

    1) 首先到https://golang.org/dl/选择适合你系统的安装包,(墙内:http://golangtc.com/download)。

    2)我这里选择的是:go1.4.2.windows-amd64.msi,下载完成安装到指定目录即可。我这里是(E:\Go)。

    3)安装完成后环境变量已经自动设置好了,可以呼出cmd命令行输入命令查看

> go env


blob.png

分类: 随笔 标签: sublime golang

[转]开发人员常用的10个Sublime Text插件

2014-03-05 09:03:09 查看评论 1079 人阅读    

Sublime是一个新兴的文本编辑器,它的轻巧和功能强大已经吸引了大批的程序员,目前它还是beta版本,但它的社区和插件的开发都非常活跃。它还有插件提供VIM的支持,连我这么多年的VI死忠粉都开始倒戈。但没有最好,只有更好,期待Sublime持续的开发给我们带来新的惊喜。

这个列表列出了十个插件,推荐给开发人员。

10. Package control

Package control是必装插件,所有其他的插件和主题都可以通过它来安装。希望它能出现在正式版默认包中。

首先参照下面的教程来安装Package Control:

9. Bracket Highlighter

用于匹配括号,引号和html标签。对于很长的代码很有用。安装好之后,不需要设置插件会自动生效。

Bracket Highlighter

分类: 随笔 标签:

博客迁移

2014-02-20 12:10:01 查看评论 787 人阅读    

之前的博客因为用的是国外vps,当时只支持信用卡续费,我没信用卡。然后悲剧了。更悲剧的是年前申请的广发银行的银行居然把我给拒了。幸运的是年后这个vps提供支付宝付款了。所以果断买了一年。

说回之前的博客采用的是WordPress,但是用了觉得各种不爽,所以当时就想重写一个。刚好在学习golang,所以果断选择了golang,也当是练手吧!本来打算把这个博客开源的。但是代码写得太烂,功能不全,所以没好意思开源。等我再进行完善还有优化先吧!

之前一直是用的PHP,因为PHP是弱类语言,转到golang各种不习惯。现在代码风格大多都是按照PHP的习惯来编写,各种乱。所以接下来还是要多看看别人的开源项目。

学习Go主要想学习服务端的开发,就web方面来说,还是PHP开发速度快,以及支持比较完善。

好吧,希望接下来能好好深入学习Go,另外多提供点Go开源项目!

END

分类: 随笔 标签: