查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

@fc_lamp

关注Web应用解决方案MySql/PHP/Python一盏名为"飞川"的灯~

 
 
 
 
 
 

在电商系统中,到底要怎么扣减库存?

2017-6-14 23:30:28 阅读304 评论0 142017/06 June14

来源:58沈剑

业务复杂、数据量大、并发量大的业务场景下,典型的互联网架构,一般会分为这么几层:

调用层,一般是处于端上的browser或者APP

站点层,一般是拼装html或者json返回的web-server层

服务层,一般是提供RPC调用接口的service层

数据层,提供固化数据存储的db

对于库存业务,一般有个库存服务,提供库存的查询、扣减、设置等RPC接口:

库存查询,stock-service本质上执行的是

select num from stock where sid=$sid

库存扣减,stock-service本质上执行的是

update stock set num=num-$reduce where sid=$sid

库存设置,stock-service本质上执行的是

update stock set num=$num_new where sid=$sid

用户下单前,一般会对库存进行查询,有足够的存量才允许扣减:

如上图所示,通过查询接口,得到库存是5。

用户下单时,接着会对库存进行扣减:

如上图所示,购买3单位的商品,通过扣减接口,最终得到库存是2。

希望设计往往有容错机制,例如“重试”,如果通过扣减接口来修改库存,在重试时,可能会得到错误的数据,导致重复扣减:

如上图所示,如果数据库层面有重试容错机制,可能导致一次扣减执行两次,最终得到一个负数的错误库存。

作者  | 2017-6-14 23:30:28 | 阅读(304) |评论(0) | 阅读全文>>

客户端(浏览器端)数据存储技术概览

2017-3-15 14:37:25 阅读260 评论0 152017/03 Mar15

在客户端(浏览器端)存储数据有诸多益处,最主要的一点是能快速访问(网页)数据。(以往)在客户端有五种数据存储方法,而目前就只有四种常用方法了(其中一种被废弃了):

CookiesLocal StorageSession StorageIndexedDBWebSQL (被废弃)[fc_lamp: 在基于WebKit 的浏览器是支持 sqllite操作]Cookies

Cookies 是一种在文档内存储字符串数据最典型的方式。一般而言,cookies 会由服务端发送给客户端,客户端存储下来,然后在随后让请求中再发回给服务端。这可以用于诸如管理用户会话,追踪用户信息等事情。

此外,客户端也用使用 cookies 存储数据。因而,cookies 常被用于存储一些通用的数据,如用户的首选项设置。

Cookies 的 基本CRUD 操作

通过下面的语法,我们可以创建,读取,更新和删除 cookies:

// Create

document.cookie = "user_name=Ire Aderinokun";

document.cookie = "user_age=25;max-age=31536000;secure";

// Read (All)

console.log( document.cookie );

// Update

document.cookie = "user_age=24;max-age=31536000;secure";

作者  | 2017-3-15 14:37:25 | 阅读(260) |评论(0) | 阅读全文>>

正则表达试分组语法(?xxx)

2017-1-4 10:32:57 阅读66 评论0 42017/01 Jan4

常用分组语法分类代码/语法说明捕获(exp)匹配exp,并捕获文本到自动命名的组里(?<name>exp)匹配exp,并捕获文本到名称为name的组里,也可以写成(?'name'exp)(?:exp)匹配exp,不捕获匹配的文本,也不给此分组分配组号零宽断言(?=exp)匹配exp前面的位置(?<=exp)匹配exp后面的位置(?!exp)匹配后面跟的不是exp的位置(?<!exp)匹配前面不是exp的位置注释(?#comment)这种类型的分组不对正则表达式的处理产生任何影响,用于提供注释让人阅读

来源:

作者  | 2017-1-4 10:32:57 | 阅读(66) |评论(0) | 阅读全文>>

一个字母数组,需要转成每三个字母一组

2016-3-17 23:49:01 阅读59 评论0 172016/03 Mar17

此需求,如果不知道PHP str_split方法,则需要循环处理数组自行组装。实际上使用 str_split方法很简单。

$letters = implode('',$letters);

$letters = str_split($letters,$groupn);

即可。

返回指定列,返回ID列。

array_column

此函数作用非常大,再也不用foreach去处理了,但需要php.5.5版本的支持。

$records = array(

    array(

        'id' => 2135,

        'first_name' => 'John',

        'last_name' => 'Doe',

    ),

    array(

        'id' => 3245,

        'first_name' => 'Sally',

        'last_name' => 'Smith',

    ),

    array(

        'id' => 5342,

作者  | 2016-3-17 23:49:01 | 阅读(59) |评论(0) | 阅读全文>>

隐藏HTML 元素 知多少

2016-2-20 23:23:41 阅读115 评论0 202016/02 Feb20

一说起CSS隐藏元素,我想大部分小伙伴们都会想到的第一种方法就是设置display为none。这是最为人所熟知也是最常用的方法。我相信还有不少人想到使用设置visibility为hidden来隐藏元素,这种方式也是常用的方法,而且也有很多人知道两者的不同。除了这两种方法,本文还总结了一些比较不常用的方法,比较了这几种“隐藏”元素方法的区别和优缺点,欢迎大家交流!!

几种方法的简单介绍

首先我们分别来说说到底有哪几种隐藏元素的方法,有一些方法是众所周知的,还有一些算是一种技巧。

display:none

设置元素的display为none是最常用的隐藏元素的方法。

1

2

3

.hide {

display:none;

}

将元素设置为display:none后,元素在页面上将彻底消失,元素本来占有的空间就会被其他元素占有,也就是说它会导致浏览器的重排和重绘。

visibility:hidden

设置元素的visibility为hidden也是一种常用的隐藏元素的方法,和display:none的区别在于,元素在页面消失后,其占据的空间依旧会保留着,所以它只会导致浏览器重绘而不会重排。

1

2

3

.hidden{

visibility:hidden

}

visibility:hidden适用于那些元素隐藏后不希望页面布局会发生变化的场景

作者  | 2016-2-20 23:23:41 | 阅读(115) |评论(0) | 阅读全文>>

PHP 纠正(旋转)图像(片)倒置问题

2016-1-11 15:47:33 阅读251 评论0 112016/01 Jan11

 一 先简单说说图像(片)的旋转问题

   当你用手机以某种角度拍照时,图片也是以某种角度旋转了(用IHPONE查看图片时,IHPONE自动帮你纠正了照片,android 则不会)。图片的旋转角度信息是存放在图片的exif数据包里,参数为 Orientation。其值如下表:

旋转角度参数0°1顺时针90°6逆时针90°8180°3

二 PHP处理,我们需要使用exif_read_data 函数来获取图片的exif信息,然后使用imagerotate 函数来旋转图片。

三 具体实现:

/**

* 修正(旋转图像)

* @param $imgPath 图像路径

* @param $degrees 旋转角度

* @internal

* @author fc_lamp

*/

function correctImageAngle($imgPath,$degrees=False)

{

$ext = '';

if($degrees===False)

{

//则直接看图像是否倒置了,

if(!function_exists('exif_read_data'))

{

//exif_read_data 能获取图像中所有exif信息

作者  | 2016-1-11 15:47:33 | 阅读(251) |评论(0) | 阅读全文>>

正则表达式集合

2016-1-9 20:52:24 阅读111 评论0 92016/01 Jan9

一、校验数字的表达式

1 数字:^[0-9]*$

2 n位的数字:^\d{n}$

3 至少n位的数字:^\d{n,}$

4 m-n位的数字:^\d{m,n}$

5 零和非零开头的数字:^(0|[1-9][0-9]*)$

6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$

7 带1-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$

8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$

9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$

10 有1~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$

11 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$

12 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$

13 非负整数:^\d+$ 或 ^[1-9]\d*|0$

14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$

15 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$

16 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$

作者  | 2016-1-9 20:52:24 | 阅读(111) |评论(0) | 阅读全文>>

关于登录页

2016-1-9 1:47:17 阅读116 评论0 92016/01 Jan9

我们会骂 12306 的网站界面挫,效果差,速度慢,回头看看自己写的代码,是不是也一样的狗血!在前端,很多看似简单的东西,内藏无数玄机。本文将以一个小小的登陆框为入口,谈一谈如何完善自己的程序。

在很多人眼里,前端就是 DIV+CSS+JQuery,甚至还有些人停留在 table 布局的迷雾当中(这些人应该跟 IE6 一样,随着历史渐渐被尘封)。但,前端绝不是你所看到的那样。举个例子,登录页面几乎是每一个系统不可或缺的模块,很多娴熟的人可以在一刻钟之内写好一个登录页面,两个 input,一个提交 button,万事 OK。

Username: <input type="text" /><br />

Password: <input type="password" /><br />

<input type="sbumit" />

当然,作为一个完成登录验证的页面,这几个元素完全可以胜任,但我只能说你完成了一个可以用的页面,这种页面完全没有用户体验可言,完全不符合一个具有的严谨的思维的程序员的作风!

一、一切以良好用户体验为基础1、视觉效果

界面的设计就不用多说了,一般情况这个属于美工的活儿,这里要谈的是几个最基础的点。

第一,你的页面兼容性如何?各个元素的长宽、行高等在不同浏览器上是否表现一致,如果这个都没有保证,那一定是不合格的。

作者  | 2016-1-9 1:47:17 | 阅读(116) |评论(0) | 阅读全文>>

互联网秒杀设计(通用)

2015-7-26 10:50:59 阅读292 评论0 262015/07 July26

分享内容抢先看

本次分享介绍了A对抢购业务的设计实践,主要包含如下主题: 

1. 抢购业务介绍 

2. 具体抢购项目中的设计 

2.1. 如何解耦前后端压力 

2.2. 如何保证商品库存可靠 

2.3. 如何在业务中多放对账 

3. 项目总结 

4. Q & A

抢购、闪购,从国外风靡后,国内各类网站都开始做相似的业务,我们耳熟能详的唯品会、淘宝、京东都有这类业务。抢购,更多出现在电商网站。那么,今天和大家一起学习下抢购业务形态的业务架构设计。

1.抢购业务介绍

我们常见的抢购业务分两种: 限时抢购、限量抢购,我简单分了下这些case,如下图:

想必小米的抢购运营的最火爆了,每发一款新品,都限量发售,每次搞的大家心里痒痒的。记得之前还因为抢购太火爆,站点打不开,崩溃了。那么问题来了:为什么抢购总是引发RD、OP恐慌?我理解是,爆品太火爆,瞬时请求太大,导致业务机器、存储机器都在抢购高峰时扛了太多压力。那么,我们今天以一个抢购业务场景为例,看看如何扛住压力,做好抢购业务!假设,这时候我们接到了产品层面的需求,如下图:

PM也挺呵呵的,又要有时段的要求、又要有限量的要求,大而全呐! 

不过,对于咱们RD同学,也不是问题,我们一起来看看,如何设计业务架构,把需求满足的棒棒哒! 

首先,我们冷静的看看需求。

作者  | 2015-7-26 10:50:59 | 阅读(292) |评论(0) | 阅读全文>>

PHP 平均计数器

2014-12-13 0:45:49 阅读178 评论0 132014/12 Dec13

需求如下:

有一个数字记录集,总共 1506 ,现在要求某段时间内前的80s内,数字要被运行到1000,其后时间段内均衡减少到0(即到最后时间时,数字记录集刚好被执行完)。

纯PHP算法1( 源自:@Yittyer):

/**

* 数定跳动算法

* @param number $sp

* @return number

*/

private function c_num($sp=80,$to=1000,$totalNum=1506,$start_time='时间戳',$stop_time='时间戳')

{

if(time () < $start_time)

{

return 0;

}

//$sp秒内

$rest=time()-$start_time;

if($rest<=$sp){

$cn=intval(($to/($sp*$sp))*$rest*$rest);

}else{

//$sp秒后

//总时长

$totalTime=$stop_time-$start_time;

作者  | 2014-12-13 0:45:49 | 阅读(178) |评论(0) | 阅读全文>>

查看所有日志>>

 
 
 
 
 
 

有道博客搜索

 
 
 
 
 
 
 

四川省 成都市

 发消息  写留言

 
博客等级加载中...
今日访问加载中...
总访问量加载中...
最后登录加载中...
 
 
 
 
 

日志分类

 
 
日志分类列表加载中...
 
 
 
 
 
 
 
模块内容加载中...
 
 
 
 
 
 我要留言
 
 
 
留言列表加载中...
 
 
 
 
 
 
 
博友列表加载中...
 
 
 
 
 

小工具

 
 
模块内容加载中...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018

注册 登录  
 加关注