redis数据结构
2021-04-28 11:11:39 0 举报
Redis数据结构和Redis相关
作者其他创作
大纲/内容
rehashidx-1
table*
redis dict
ht[0]
xxxxx
R
client1
k1
free5
ht[1]
0
io多路复用器
s
k0
database
client2
clientn
socket1
redis aof
size0
key1
used0
$2
备注:1. type:它通过自定义的方式使得dict的key的value能够存储任何类型的数据。2. privdata: 由调用者在创建dict的时候传进来。3. sizemask: 哈希表大小掩码,存的是全1的值,和计算得到的hash值做与运算快速得到key落在数据桶的下标。(类似网络里的子网掩码得到机器号)4. used: 是hash表里存的键值对个数。5. hash表数组后的链表采用头插法插入数据,O(1)。在顶部插入元素,假设在数据库中系统更有可能访问最近添加的条目更频繁。
连接应答处理器
*3
$4
文件事件分派器
2
1
used2
EXPIRETIME_MS
注意:1. aof文件内以\\换行符作为切割,*号后面数字为该条命令参数个数,$符号后数字为参数长度。2. aof文件内只会存改变数据库状态的命令,一些查询统计的命令不会存储。3. aof 是默认不开启的,需要修改配置onlyappend yes手动开启,默认每秒刷新一次缓存区到磁盘。
...
socket2
命令回复处理器
sizemask0
sds
周期性事件serverCron函数
*2
key
size4
dictEntry
SELECTDB
......
SELECT
dict
EOF
redis sds
命令请求处理器
socketn
value
sizemask3
redis rdb
redis c/s
SADD
e
NULL
check_sum
$5
10
privdata
\\0
db_number
i
db_version
REDIS
定时(定期)事件
文件事件处理器
时间事件
type
dictht
$6
d
len5
dictEntry* [4]
redis server
buf[]
注意:1. redis内使用C字符串作为字面量,已修改的字符串都会使用SDS。2. buf数组已'\\0'结尾,兼容C语言字符串库函数,且结束符不计算在len长度内。3. sds存的是二进制数据,具备二进制安全,不会因为客户端编码异常。4. free预留空间,能减少内存重分配次数。(预分配和惰性空间释放)
3
ms
v1
v0
备注:1. redis服务端是一个事件驱动程序,文件事件基于reactor模式实现网络通信程序。2. 时间事件是redis对按时和周期性执行代码的抽象,分为定时和周期2种互为合作,服务器会轮流处理。
ht[2]*
key_value_pairs
0 条评论
下一页