06 2012 档案
摘要: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
阅读全文
摘要:coolshell最新的文章《性能调优攻略》在“多核CPU调优”章节,提到“我们不能任由操作系统负载均衡,因为我们自己更了解自己的程序,所以,我们可以手动地为其分配CPU核,而不会过多地占用CPU0,或是让我们关键进程和一堆别的进程挤在一起。”。在文章中提到了Linux下的一个工具,taskset,可以设定单个进程运行的CPU。同时,因为最近在看redis的相关资料,redis作为单进程模型的程序,为了充分利用多核CPU,常常在一台server上会启动多个实例。而为了减少切换的开销,有必要为每个实例指定其所运行的CPU。下文,将会介绍taskset命令,以及sched_setaffinity系
阅读全文
摘要: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 ...
阅读全文
摘要:在redis中,字符串类型sds struct是如下定义的: 41 struct sdshdr { 42 int len; 43 int free; 44 char buf[]; 45 };在其中,使用了char buf[]而不是char *buf。写了个测试程序,程序以及在64位机器上跑出来的结果如下:1 #include<stdio.h>2 3 struct sdshdr1 {4 int len;5 int free;6 char buf[];7 };8 struct sdshdr2 {9 int len;10 int free;11 char *buf;12 };...
阅读全文
摘要:serverCron是redis每隔100ms执行的一个循环事件,由ae事件框架驱动。其主要执行如下任务:1.记录循环时间:server.unixtime = time(NULL)redis使用全局状态cache了当前的时间值。在vm实现以及lru实现中,均需要对每一个对象的访问记录其时间,在这种情况下,对精度的要求并不高(100ms内的访问值一样是没有问题的)。使用cache的时间值,其代价要远远低于每次均调用time()系统调用2.更新LRUClock值:updateLRUClock()后续在执行lru淘汰策略时,作为比较的基准值。redis默认的时间精度是10s(#defineREDIS
阅读全文