摘要: 转一篇文章,学到了很多东西,而且自己稍微贡献了点点内容。原帖地址:http://qing.weibo.com/1639780001/61bd0ea1330025sq.html-------------分割线,版权归原作者所有,有想投简历的也请直接找原作者--------------Update: 更新了数据持久化和一致性保证相关的内容,多谢 @lihan_harry @郑环Zheng @51刘达 等同学的提醒。Update2: 更新了 对于weibo_id key的优化,使用前缀压缩,可以节省近一半的空间。 感谢 @吴廷彬 @drdrxp 的建议!Update3: 更新了 对于value 使用 阅读全文
posted @ 2012-09-09 09:26 刘浩de技术博客 阅读(1032) 评论(1) 推荐(0) 编辑
摘要: 在上一篇blog(Twitter背后的开源技术)中,Twitter主管开源的ManagerChris Aniszczyk为大家介绍了Twitter使用开源软件的情况。同时,也作为其在LinuxCon主题演讲《The open source technology behind a Tweet.》的预告。LinuxCon已经结束,现在可以更加全面的窥视Twitter对开源软件的使用情况,以及一个tweet是如何完成其生命之旅的。 下文是对《How Twitter tweets your tweets with open source》一文的摘抄及翻译,原文请点击这里。 1.Twit... 阅读全文
posted @ 2012-09-02 19:45 刘浩de技术博客 阅读(2023) 评论(0) 推荐(1) 编辑
摘要: 使用redis存一些key,value数据,有部分value数据是整形值,于是想当然的写了下边的代码: 67 bool DBManager::getKeyInteger(const std::string& key, uint64_t& ret_val) { 68 redisContext* c; 69 redisReply* reply; 70 71 struct timeval timeout = {1, 500000}; 72 c = redisConnectWithTimeout(m_host.c_str(), m_port, timeout); 73 if (c... 阅读全文
posted @ 2012-08-28 18:56 刘浩de技术博客 阅读(7617) 评论(0) 推荐(3) 编辑
摘要: 原文:The open source technology behind Twitter 如果没有开源软件,Twitter将不会存在。你发送和接收的每一个Tweet在移动端和PC端发送的过程中,都会需要开源软件。我们非常好奇Twitter使用了多少开源软件。除此之外,我们想要知道开源对Twitter公司的文化产生了什么影响。 我们采访了Twitter公司主管开源的ManagerChris Aniszczyk,来和我们大家分享Twitter的开源故事。Aniszczxk将会在本月的LinuxCon(8月29日至31日,在San Diego,CA)上做主题演讲: The open sour... 阅读全文
posted @ 2012-08-15 20:08 刘浩de技术博客 阅读(3717) 评论(0) 推荐(1) 编辑
摘要: 我们在使用RabbitMQ的过程中遇到了一个很麻烦的问题。(RabbitMQ version 2.8.1, Erlang version 5.7.4)我们的使用场景如下:1.cluster模式(假设有3台机器组成的集群);2.一个exchange,后边绑定多个队列;3.多个producer(producer数目无法减少,和上游流程的处理能力相关);4.producer可能向多个队列里发消息,消息的到来不均匀,导致可能存在多个producer同时向一个队列持续发送消息的状况;5.消息大小在100KB上下;6.客户端随机连接一台server;7.为了增加发送消息的速率,一个连接对应10个chann 阅读全文
posted @ 2012-08-14 19:30 刘浩de技术博客 阅读(12509) 评论(2) 推荐(2) 编辑
摘要: 组内同事下午做了个关于python的小的share,觉得讲的还不错,将其中的Performance Tuning部分摘抄出来,供参考。首先,谨记高德纳老先生的名言:过早优化是万恶之源(Premature optimization is the root of all evil.)性能调优分问如下几步:Find bottlenecksUse better algorithmsUse faster toolsWrite optimized codeWrite your own python moduleParallezie the compution第一步是找出程序运行的性能瓶颈所在。python 阅读全文
posted @ 2012-07-27 17:31 刘浩de技术博客 阅读(3195) 评论(0) 推荐(1) 编辑
摘要: 跳表(skiplist)是一个非常优秀的数据结构,实现简单,插入、删除、查找的复杂度均为O(logN)。LevelDB的核心数据结构是用跳表实现的,redis的sorted set数据结构也是有跳表实现的。其结构如下所示:所有操作均从上向下逐层查找,越上层一次next操作跨度越大。其实现是典型的空间换时间。具体的细节,可参考维基百科http://en.wikipedia.org/wiki/Skip_list本文作者将redis的sorted set代码进行整理,将跳表部分的实现抽取出来,供参考。skiplist.h 1 #ifndef __SKIPLIST_H 2 #define __SKIP 阅读全文
posted @ 2012-07-26 15:55 刘浩de技术博客 阅读(15705) 评论(10) 推荐(1) 编辑
摘要: redis作者@antirez在其blogHow to take advantage of Redis just adding it to your stack中提到:“Similarly using sorted sets it is possible to implement priority queues easily.”。本文将会探讨下如何使用redis提供的sorted sets数据结构,构造高效率的优先级队列。什么是sorted sets以下段落来自reids.io->Data types。Redis Sorted Sets are, similarly to Redis S 阅读全文
posted @ 2012-06-26 14:56 刘浩de技术博客 阅读(10012) 评论(1) 推荐(2) 编辑
摘要: coolshell最新的文章《性能调优攻略》在“多核CPU调优”章节,提到“我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起。”。在文章中提到了Linux下的一个工具,taskset,可以设定单个进程运行的CPU。同时,因为最近在看redis的相关资料,redis作为单进程模型的程序,为了充分利用多核CPU,常常在一台server上会启动多个实例。而为了减少切换的开销,有必要为每个实例指定其所运行的CPU。下文,将会介绍taskset命令,以及sched_setaffinity系 阅读全文
posted @ 2012-06-21 17:38 刘浩de技术博客 阅读(20668) 评论(4) 推荐(3) 编辑
摘要: hiredis是redis官方提供的c客户端库。在读代码的过程中,发现了一个bug,记录一下。hiredis里定义了一个上下文结构(struct redisContext),代码如下(deps/hiredis/hiredis.h):https://github.com/antirez/hiredis/blob/master/hiredis.h157 /* Context for a connection to Redis */158 typedef struct redisContext {159 int err; /* Error flags, 0 when there is no ... 阅读全文
posted @ 2012-06-20 17:47 刘浩de技术博客 阅读(5369) 评论(9) 推荐(1) 编辑