Redis源码阅读——dict
Redis源码阅读——dict
继续Redis 的源码阅读,进入dict这一章节。知识点讲解,见redis设计与实现的读书笔记dict这一章。
dict的创建
还是和sds一样单独将dict模块给提取出来,参考博客是直接将server的main函数给修改了的。再阅读Makefile的时候发现了dict-benchmark 这个选项,make dict-benchmark
这个命令,可以编译出一个可执行文件dict-benchmark。
所以想着应该可以单独再把dict-benchmark给提取出来。
需要拷贝的文件
1 | dict.c ditc.h fmacros.h redisassert.h sdsaclloc.h sds.c sds.h siphash.c |
需要做的修改
zmalloc zfree zcalloc 需要修改成使用malloc ,free, calloc 其中zcalloc在修改成calloc的时候需要在调用的时候多传入一个参数1,作为第一个参数,因为zcalloc 和calloc 的接口不一样。
还需要在redisassert.h 中对_serverAssert函数做出定义: 参考debug.c 里面的定义。
1 | void _serverAssert(char *estr, char *file, int line){ |
修改成使用libc 的内存分配器后会造成性能下降,zmalloc 要好于malloc 所以要想真实还原的话,看下怎么把zmalloc给移植过来。zmalloc用的是jemalloc.
编写简单的Makefile为:
1 | dict-benchmark: dict.c sds.c siphash.c |
计算索引
_dictKeyIndex 函数。
1 | /* Returns the index of a free slot that can be populated with |
参考
https://blog.csdn.net/yangbodong22011/article/details/78467583
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 BraveY!