Redis 采用的是单线程 Reactor。单机压测QPS可以达到10w , 因为 Redis 主要是以内存读写为主,效率是非常高的。 Redis 服务器是一个事件驱动的程序,服务器需要处理一下两类事件: 1、文件事件(file event): Redis 服务器通过套接字与客户端(或者其他 Redis 服务器)进行连接,而文件事件就是服务器对套接字操作的...
makeObject这个方法(1)第一步就是构建了一个ShardedJedis对象,就是调用getResource()方法返回的对象,这个对象包含对数据结构的各种操作, 通过构造函数ShardedJedis(shards, algo, keyTagPattern)调用父类的构造方法,然后调用initialize方法,这个初始化方法就是redis中使用一致性哈希的 地方所在,循环shards(此处的shards就...
void populateCommandTable(void) { int j; // 命令的数量 int numcommands = sizeof(redisCommandTable)/sizeof(struct redisCommand); for (j = 0; j < numcommands; j++) { // 指定命令 struct redisCommand *c = redisCommandTable+j; // 取出字符串 FLAG char *f = c->sflags; ... // ...
2.在初始化配置中调用了populateCommandTable(redis.c:925)函数,该函数的目地是将命令集分布到一个hash table中,大家可以看到每一个命令都对应一个处理函数,因为redis支持的命令集还是蛮多,所以如果要靠if分支来做命令处理的话即繁琐效率还底, 因此放到hash table中,在理想的情况下只需一次就能定位命令的处理函数。
redis 的源码确实是比我想象中要好读,本身是过程式编程,所以很多核心逻辑已经包含在 main 函数的调用链,流程非常长,耐心看下去还是能 get 到些东西的。main 函数包含了很多逻辑:哨兵模式、定时任务、持久化、模块加载、从磁盘加载数据等等,每个地方都能单独拎出来讲,这里就不说太多了 int main(int argc, ...
深入底层C源码分析Redis 1.Redis是基于键值对存储数据的,像我们平时会使用的时候很容易觉得Redis的键值是多种数据类型的,其实不然,Redis的键值是String类型的,数据变成字节流(byte)基于网络传输的过程,传到Redis服务转成SDS(Simple Dynamic String【简单动态字符串】) String(Redis自定义的数据类型)。既然Redis是基于C...
} redisClient *createClient(int fd) { // 分配空间 redisClient *c = zmalloc(sizeof(redisClient)); if (fd != -1) { ... //绑定读事件到事件 loop (开始接收命令请求) if (aeCreateFileEvent(server.el,fd,AE_READABLE, readQueryFromClient, c) == AE_ERR){ // 清理/关闭资源退出 } } ...
git clone https://github.com/redis/redis.git git checkout remotes/origin/7.0# redis简易使用场景都在Readme里,我第一件事就会先看它vi README.md# 编译make# 测试框架依赖yum install tcl# 跑用例make test 我们可以在src目录中看到编译好的六个进程,这六个进程应该就是Redis可以对外提供业务能力,让我们...
Redis源码分析-6.22 ACL模块源码解读3, 视频播放量 97、弹幕量 0、点赞数 5、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 沈无奇, 作者简介 ,相关视频:Redis源码分析-6.23 ACL模块源码解读4(第6章完结),Redis 初级到高级 - Redis Beginners to Advance With Free