Redis设计与实现读书笔记——第九章 数据库
发表于|更新于|读书笔记
|总字数:113|阅读时长:1分钟|浏览量:
Redis设计与实现读书笔记——第九章 数据库
终于看到了服务器部分了,主要是想搞懂数据库的整个流程与架构。
9.1 服务器中的数据库
将所有数据库都保存在redis.h/redisServer结构的db数组中(哇,不可思议用数组来保存的),db数组每个项都是一个redis.h/redisDb结构指针,而一个redisDb代表了一个数据库。
文章作者: BraveY
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 BraveY!
相关推荐

2019-04-26
Redis Makefile注解
Redis Makefile注解Redis的makefile是阅读源码的第一步,总共有292行,读起来也是头大,记录之。 4.02版本源码为: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771...

2019-03-27
Redis 设计与实现读书笔记——第四章 字典
Redis 设计与实现读书笔记——第四章 字典字典在Redis中应用很广泛,Redis的数据库就是用字典作为底层实现的,对数据库的增删改查操作也是构建在对字典的操作之上的。 简介作用: 数据库底层实现 哈希键底层实现 哈希键包含的键值对比较多,或者键值对中的元素都是比较长的字符串时,使用字典来实现。 其他功能 4.1 字典的实现字典使用哈希表实现,一个哈希表里面可以有多个哈希表节点,一个哈希表节点就保存了字典中的一个键值对。(python的dict也是使用哈希表实现的)。 哈希的本质就是预留内存空间,将需要存储的元素计算索引值(通过哈希函数)来确定对应的存储位置。当需要访问的时候可以通过哈希函数直接获得对应的地址。(编译器将变量名与地址做了映射,变量名是地址的别名,哈希则是将键与地址做了映射(通过哈希函数),大大提高了访问的效率。访问任何元素都是O(1),感觉是两个层面的映射,有点相似的感觉)。 4.1.1 哈希表Redis使用的哈希表由dict.h/dictht 结构定义。 1234567891011typedef struct dictht { //...

2019-04-10
Redis源码阅读——字典
Redis源码阅读——字典字典是整个Redis实现的基础,之前把《Redis设计与实现》书上的理论知识看完了,开始阅读源码。 Rehash参考https://tech.meituan.com/2018/07/27/redis-rehash-practice-optimization.html https://luoming1224.github.io/2018/11/12/[redis%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0]redis%E6%B8%90%E8%BF%9B%E5%BC%8Frehash%E6%9C%BA%E5%88%B6/

2019-04-03
Redis源码阅读——dict
Redis源码阅读——dict继续Redis 的源码阅读,进入dict这一章节。知识点讲解,见redis设计与实现的读书笔记dict这一章。 dict的创建还是和sds一样单独将dict模块给提取出来,参考博客是直接将server的main函数给修改了的。再阅读Makefile的时候发现了dict-benchmark 这个选项,make dict-benchmark 这个命令,可以编译出一个可执行文件dict-benchmark。 所以想着应该可以单独再把dict-benchmark给提取出来。 需要拷贝的文件 1dict.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 中对_serverAsser...

2019-03-22
Redis源码阅读——SDS
Redis源码阅读——SDS参考Redis设计与实现 以及网上博客阅读Redis源码。 SDS相关知识点见读书笔记。 创建和销毁为了能够对sds进行相关API的测试,因此把sds模块单独提出来。阅读Redis的Makefile发现,编译sds模块需要的源文件包括sds.c, sds.h zmalloc.c 123test-sds: sds.c sds.h $(REDIS_CC) sds.c zmalloc.c -DSDS_TEST_MAIN $(FINAL_LIBS) -o /tmp/sds_test /tmp/sds_test 但是实际编译后会发现会报很多函数未定义的错。原因是redis源码里面sds的内存分配、释放、重分配这些函数是封装成zmalloc,zfee这些函数的,只单纯的把zmalloc.c提取出来是远远不够的。后面发现redis的作者已经把sds给单独提出来了。包括三个源文件sds.c,sds.h,sdsalloc.h 因此执行如下操作即可单独把redis的sds模块提取出来。 提取sds模块...

2019-03-14
shell 脚本遍历redis数据库
使用shell脚本遍历redis数据库中的所有kv对记录下如何使用shell通过redis-cli 命令来操作redis数据库,因为直接在命令行中输入 redis-cli command 的话command必须是单个单词,不能像是KEYS * 这种. 123456789101112#!/bin/bashfilename='redis'`date +%Y-%m-%d_%H:%M`work_path=$(dirname "$0") echo "实例化redis数据文件为:$work_path/$filename"echo "keys *" | redis-cli > key_db.txtecho "将所有key保存到:$work_path/key_db.txt"for line in `cat key_db.txt`do echo "key:$line " ...
评论




