
数据结构/算法
文章平均质量分 92
zhongrui_fzr
公众号:step in 机器学习
github主页:https://zrfan.github.io/
展开
-
《Redis设计与实现》[第一部分]数据结构与对象-C源码阅读(一)
一、简单动态字符串SDS 关键字:空间预分配,惰性空间释放,二进制安全 C字符串不易更改,所以Redis中把C字符串用在一些无须对字符串值进行修改的地方,作为字符串字面量(String literal),比如打印日志: redisLog(REDIS_WARING, “Redis is now ready to exit, bye bye…”); 在Redis数据库中,包含字符串的键值对在原创 2016-05-29 17:20:57 · 5961 阅读 · 0 评论 -
《Redis设计与实现》[第一部分]数据结构与对象-C源码阅读(二)
四、跳跃表 关键字:层高随机 跳跃表支持平均O(logN)、最坏O(N)复杂度的结点查找,还可以通过顺序性操作来批量处理结点。在大部分情况下,跳跃表的效率可以和平衡树相媲美,因为跳跃表的实现比平衡树来得更为简单,所以不少程序都使用跳跃表代替平衡树。Redis使用跳跃表作为有序集合键的底层实现之一,如果有一个有序集合包含的元素数量比较多,或有序集合中元素的成员是比较长的字符串时,Redis就会使用原创 2016-05-30 16:56:21 · 3204 阅读 · 0 评论 -
《Redis设计与实现》[第二部分]单机数据库的实现-C源码阅读(一)
1、数据库 关键字:键空间,过期,删除策略 数据结构源码//redisServer中属性太多,篇幅限制,故只列本章描述相关的属性 struct redisServer { //... // 数据库 //一个数组,保存着服务器中的所有数据库 redisDb *db; // 服务器的数据库数量 int dbnum;原创 2016-05-31 16:21:44 · 3170 阅读 · 2 评论 -
Trie树与位操作
使用Trie树解决数字位操作问题。Trie树Trie树可以将keys/numbers/strings等信息保存在树中。 Trie树由一系列结点组成,每个结点存储一个字符/位。从而我们可以插入新的strings/numbers。 以trie树存储strings为例: 但现在我们要用trie树解决数字问题,特别是二进制位。问题如下: Problem1: Given an array of原创 2016-05-19 21:19:21 · 939 阅读 · 1 评论 -
《Redis设计与实现》[第二部分]单机数据库的实现-C源码阅读(二)
2、RDB持久化 关键字:RDB文件解析,自动间隔性保存 Redis提供RDB持久化功能,可以将Redis在内存中的数据库状态保存到磁盘里,避免数据意外丢失。RDB持久化可以手动执行,也可以根据服务器配置选项定期执行,该功能可以将某个时间点上的数据库状态保存到一个RDB文件中。RDB文件生成RDB持久化功能所生成的RDB文件是一个经过压缩的二进制文件,通过该文件可以还原生成RDB文件时的数据库状原创 2016-06-02 19:40:07 · 3389 阅读 · 0 评论 -
《Redis设计与实现》[第二部分]单机数据库的实现-C源码阅读(三)
3、AOF持久化 关键字:AOF持久化:文件写入与同步,AOF文件重写,数据一致性 与RDB持久化通过保存数据库中的键值对来记录数据库状态不同,AOF持久化是通过保存redis服务器所执行的写命令来记录数据库状态的被写入AOF文件的所有命令都是以redis的命令请求协议格式保存的,因为redis的命令请求协议是纯文本格式,所以可以直接打开一个AOF文件,观察里面的内容AOF文件初始会自动添加一个原创 2016-06-06 20:59:21 · 2894 阅读 · 0 评论