
Redis
ordeder
关注Linux&TCPIP&Nginx&Redis
展开
-
Redis2.2.2源码学习——dict中的hashtable扩容和rehash
dict是Redis的hash表结构,所有类型的元素都可以依据key值计算hashkey,然后将元素插入到dict的某个hash链上(采用拉链发解决hash冲突)。其中,dict的总hashtable的扩容是dict很重要的部分。Redis的“管家”函数serverCron会依据一定的算法(dict中的used与size的比值)判定是否开始进行hashtable的扩容。扩容之后,hashtalbe的长度将变长,那么hashtalbe的masksize与原来的makssize就不同了,那么计算出的hashke原创 2013-10-17 13:35:18 · 4970 阅读 · 2 评论 -
Redis2.2.2源码学习——信号的处理
Redis对信号的处理如下: 1)忽略的信号:SIGHUP(终端session关闭)、SIGPIPE(管道错误) 2)出错相关信号:SIGSEGV SIGBUS SIGFPE SIGILL 处理方式:触发段错误的处理函数中, 1.主要将错误信息写入日志 2.将该信号处理信号设置为默认,重新在本身发送该信号(执行信号的默认处理) 3)进程结束信号:SIGTERM(该信号用于请求中止进程,kill命令缺省发送) 1.server.shutdown_asap = 1; 和程序出错信号相比,SI原创 2013-10-17 20:26:47 · 2942 阅读 · 2 评论 -
Redis源码学习-Master&Slave的命令交互
Redis中可以支持主从结构,本文主要从master和slave的心跳机制出发(PING),分析redis的命令行交互。在Redis中,server为每个连接建立一个redisClient数据对象,来描述对应的连接。其中,redisClient为命令交互设置了缓冲区。querybuf用于存储客户端送过来的命令,buf和reply是用于应答的缓冲。querybuf是在文件事件readQueryFromClient中被填充,每次填充的最大字节数默认为1024B。而应答缓冲区是由addReply()函数填充,并由原创 2013-11-13 23:07:44 · 5692 阅读 · 2 评论 -
Redis源码学习-NoSql复杂类型对象的hash管理(以set命令为例)
NoSql的核心是实现基于内存的K-V的快速查找。在Redis中,Hash结构就是实现k-v快速查找的核心结构,名为dict。此外,Redis的犀利之处是在于能够将整个复杂的数据类型(set,list...)打包存储。本文分析了Redis的复杂数据对象的存储方式。原创 2013-11-23 01:06:55 · 5407 阅读 · 0 评论 -
Redis源码学习-NoSql复杂类型对象的hash管理(二:List)
Redis中list结构在dict中的存储方式(REDIS_ENCODING_LINKEDLIST)。原创 2013-11-24 16:34:09 · 2073 阅读 · 0 评论 -
Redis2.2.2源码学习——Server&Client链接的建立以及相关Event
在Server端和Client的通行是以文件事件进行管理的。Redis在initServer中就创建用于 监听client连接请求的ipfd,并在该文件符上建立文件事件,用于处理客户端的连接请求。而且, 事件的处理hander是创建cfd(accept),并在cfd上同样建立文件事件,用于读取客户端的具体 命令。原创 2013-11-01 12:10:50 · 2939 阅读 · 0 评论 -
关于Redis修改配置没有效果的问题分析
今天在设置redis配置的maxmemory项总是设置不成功,原因有如下两项: 1. Redis启动过程中如果没有指定配置文件,那么redis将采用默认配置: # src/redis-server 这将使用默认配置 # src/redis-server ./redis.conf 这将使用当前目录下的re原创 2013-12-09 13:36:16 · 4568 阅读 · 0 评论 -
Redis源码学习-AOF
1 AOF日常命令append: 1.1. Redis执行文件事件:执行用户命令,并将该命令缓存于Server.aof_buf中{函数1} 1.2. Redis执行时间时间的ServerCron:依据参数server.aof_flush_postponed_start,{函数4} 1.2.1. 将redisServer.aof_buf写入文件Server.aof_fd。 1.2.2. 该文件何时fsync到磁盘有三种机制: AOF_FSYNC_EVERYSEC 每秒调用原创 2014-09-14 18:06:29 · 3853 阅读 · 0 评论 -
Redis2.2.2源码学习——aeEvent事件轮询
Version Redis2.2.2 Redis的事件主要分为文件事件和定时器时间,作者对这两种事件处理的高端之处在于预先计算最近一个要超时的定时器距离当前的事件间隔,在这个时间间隔内调用poll函数处理文件事件,之后再处理定时器时间。 /* File event structure */ typedef struct aeFileEvent { int mask; ///* 文件事件类型 读/写 one of AE_(READABLE|WRITABLE) */ aeFilePro原创 2013-10-16 21:09:12 · 5579 阅读 · 2 评论