蘑菇街的101天 — 团购重构

PS:很长时间没有写博了.主要原因就是最近一个人在支撑蘑菇街的团购业务,分身乏术.虽然没有写出分享,但还是有个人的笔记. 相对而言,博客的价值在于分享,但是由于很多的时侯,分享依赖的业务场景不同,所以很多的时侯并不适用,亦或者现场恢复困难,写出来的东西没有具体的实例,感觉不太稳妥. 最简单的一个就是关于innoDB索引计算的一个case.排查过程不说了,直接上结果,就是mysql在进行索引消耗计算的时侯存在一定的误差,可能会使用不恰当的索引.所以,在sql的书写中,尽量使用force index 语句,来告诉Mysql,使用某一条索引进行查寻.当然,如过数据量不大,十万级别的数据,看不出效果(线上场景8000万数据). 其次的一点收获就是网站开发的.由于我负责了整个团购业务,所以有很多事情必需考虑: cache 一致性 cache 被击穿 ... [阅读全文]

第一个任务 -- 店铺爬虫

关于这个项目,首先需求比较简单.或者说单一吧.唯一要做的就是将PHP传来的任务给做完.没有多余的爬取,只需要爬取一个页面上的商品描述和商店的描述.唯一好玩的一点就是需要在一周时间内 爬取180万url左右的数据.同时还要考虑对面的防刷设置.分配给的测试资源有两台16核32G的服务器. 很显然.爬虫的关键在于VPS的分配,因为一个ip访问某个网站的频率有限制.在有限的时间,要想爬取更多的网页,就需要多个vps,要多少呢.理论上,服务器的出口带宽为1000Mb,购买的VPS带宽为2Mb, 所以,考虑充分利用带宽,则需要500个.但事实上,我们的需求并没有如此之高.在实际测试中,发现最终的瓶颈在cpu上,频繁的字符串匹配,导致了cpu的飙涨.因为考虑到之后的维护,我用了整页面的 正则进行匹配,这样,之后的修改会方便很多.所以代码里会有如下的正则表达式: 看上去很... [阅读全文]

阅读Redis源码(三) -- redis通信协议与事件驱动

在redis中,关于事件驱动框架的代码集中在ae.h/ae.c中.作者也在头部设置了介绍:a simple event-driven programming library. 这个框架其实很简单,核心就是一个消息 队列,同时只有一个线程负责对其进行处理,这里面的调度思想,还是简单的优先级队列,文件操作优先级永远高于时间操作.而且任务之间并不会进行抢占. 具体执行过程,可以参照如下干特图: time ----------------------------------------------------------------------->| |<---- 10 ms ---->|<---- 10 ms ---->|<---- 10 ms ---->|<---- 10 ms ---->| | FE 1 ... [阅读全文]

阅读Redis源码(二) -- 数据库及持久化策略

之前的一篇文章写了关于Redis的字典数据结构,但是,他并不是与我们直接交互的.因为我们在进行添加字段的时候,往往需要添加过期值,这一点我们在字典数据结构中没有能够得到体现. 所以,我们需要关注另外一个数据结构,redisDb.即Redis的数据库储存,在redis.h中,该结构体的定义如下. typedef struct redisDb { dict *dict; /* The keyspace for this DB */ dict *expires; /* Timeout of keys with a timeout set */ dict *blocking_keys; /* Keys with clients waiting for data (BLPOP) */ dict *... [阅读全文]

阅读Redis源码(一) -- 基本数据结构

调试环境搭建 下载redis源代码包,可以访问"redis"官网进行下载.这边,我使用的是2.8.13的稳定版本. 解压之后使用eclipse for c/c++导入工程,选项是依据makefile的那项. 导入之后会出现一个语法错误,但事实上,这个错误是可以乎略的.就是在热带开始redis.c的第2969行,会有如下的代码: snprintf(buf,1024*16,ascii_logo, REDIS_VERSION, redisGitSHA1(), strtol(redisGitDirty(),NULL,10) > 0, (sizeof(long) == 8) ? "64" : "32", mode, server.port, (l... [阅读全文]

杭州第一周(无关技术)

好久没有写博客了。主要是因为前一段时间的期末考试,和最近一周在杭州实习。昨天为了开通电视和和房东更新洗衣机和煤气灶,忙了好久,到下午才结束,然后想去采购,结果到了商场才发现自己身上只有50块钱。。。悲剧的买了点泡面,和筷子洗发露等,正好45,然后15去吃了个饭。 今天,就因为网线和快递的问题,去了趟公司和办宽带的地方,结果,宽带很顺利,一个上午就连安装都好了,然后快递,这就是麻烦了。应该是找不到了,第一次寄快递啊,还好只是一个仓鼠笼子,如果是其他什么的,就悲剧了。然后和快递协商下来,他全额赔付。这点还是很好的,快递也比较讲道理,虽然好像确实是他错了。。。 说说实习的第一周吧,周二入职的,第一天就是搭建开发环境,第一次知道了,原来为了开发环境一致,可以通过Vagrant和VirtualBox来搭建虚拟机环境,因为作为一个Javaer,对PHP的一套不是特别熟悉,因为公司目前的代码都是PHP,... [阅读全文]