读Redis设计与实现总结

1、Redis中的字符串使用的是SDS(Simple Dynamic String)简单动态字符串,记录了free和len
SDS的作用: 记录了字符串的长度,防止缓冲区溢出(会自动进行扩容)
2、SDS字符串预分配策略
当需要扩容的时候,len < 1MB,会非配free = len
len >= 1MB, 会分配free = 1MB
3、惰性空间释放策略;将不需要的空间转化成free,没有真正释放
4、链表(前置节点,后置节点,value,头部head,尾部tail)
5、字典,hash冲突之后,将新节点放置在链表的头部
6、扩容:每次扩容2倍必须是2^N此方;然后对原来的table进行重新rehash,放到新的数组里面
7、从旧的table向新的table数组中迁移的时候,渐进式的(数据量太大)
8、有序集合的底层实现是跳跃表
9、Redis的类型: String,List,Hash,Set,Zset
10、Redis默认创建16个数据库
11、RedisDB其实就是一个字典,key==value;存储了一个过期字典,里面包含了设置过期时间的key
12、key过期删除策略:
定时删除:在创建key的时候,创建定时器,过期的时候,主动删除key
惰性删除:不管过期的key,在获取key的操作时,判断是否过期,如果过期就删除
定期删除:定期检查过期的key,然后根据算法来删除多少(会控制删除的频率和时长)
13、Redis的过期删除策略(惰性删除和定期删除配合)
14、RDB持久化命令:save(阻塞主进程),bgsave(派生子进程来执行);在服务器启动的时候,载入rdb文件(优先载入aof的文件)
15、AOF(Append Only File)过程是append,放入缓冲区,然后同步到磁盘中
16、AOF重写,对现在的文件重写,将新来的命令放入缓冲区,当新的aof文件替换了旧的文件时,把缓存中的命令追加到新的aof文件中
17、Redis集群通过分片的方式来保存键值,集群的整个数据库分为16384个槽

 

你可能感兴趣的:(读书总结)