文章目录
一、redis实现kv数据组织方式
redis 中KV组织是通过字典,通过 hashtable 来实现;
hashtable 就是通 hash运算的方式来决定字符串放到数组的哪一个槽位,数组大小根据数据量来进行调整,所以就会涉及到扩容和缩容。
- 字符串经过 hash 函数运算得到 64 位整数;
- 64位整数 % 表长size 得到余数,即是字符串在数组中的槽位;
将数组存入对应的槽位中。
0. redis的kv存储结构
存储结构
- key-value键值对 通过hash的方式存储到数组中。
- value主要的数据结构有string,list,hash,set,zset; value的数据不是单一类型,可以嵌入kv键值对。

存储转换
redis 在进行编码存储的时候,同一类型不同的数据量会导致编码的方式不同。
数据量少的时候,以存储效率高 为主
数据量多的时候,以运行查询快 为主

源码调试步骤
【1】makefile编译
make clear
bear make (编译前先安装bear)
//推荐插件clongd: ctrl + 鼠标左键实现接口跳转
【2】编译调试
查看src/Makefile 确认是有 -g -ggdb, 表示带调试信息
【3】配置两个文件
tasks.json 帮助编译代码指令
launch.json 怎么启动redis-server
【4】启动调试
vscode 菜单 运行->启动调试
1. 单线程指什么, redis是不是单线程?
单线程:指命令处理在一个线程.
redis不是单线程:本质上是一个单线程执行命令、多线程做杂活的高性能数据库.
2. 命令处理为什么是单线程,不采用多线程?
前提:单线程不能有 (例如cpu运算、阻塞io)耗时操作, 而影响redis相应性能.
1. 避免加锁复杂度
+多线程会引入并发冲突,需要加锁控制:
+加锁粒度难把控,锁得多了性能下降,锁得少了数据错乱,容易出现死锁、竞态等问题。代码复杂度和维护成本上升;
2. 避免线程切换开销
+多线程会发

:Redis存储原理与数据模型&spm=1001.2101.3001.5002&articleId=149942416&d=1&t=3&u=30aec2f8c9894a6fad85a4a0b570b7f5)
1848

被折叠的 条评论
为什么被折叠?



