《Redis设计与实现》

希望有朝一日能参与到开源中!


其实Redis很简单,就是充当缓存的作用, 不能替代MySQL(及其它)数据库。 做个比喻: 数据库就相当于硬盘,Redis就相当于内存, 在Redis里读写数据更快。 Redis一般作为中间件,服务将数据缓存到Redis里, 但必须要注意跟数据库的同步问题!!!

中间件的概念其实就是《NoSQL精粹》中讲到的混合持久化。原则:先在Redis里查,如果查不到再去数据库查, 并保持结果到Redis里

源码结构

对Redis的源代码进行了整体分类

test

  • memtest.c 内存检测
  • redis_benchmark.c 用于redis性能测试的实现
  • redis_check_aof.c 用于更新日志检查的实现
  • redis_check_dump.c 用于本地数据库检查的实现
  • testhelp.c 一个C风格的小型测试框架

struct

  • adlist.c 用于对list的定义,它是个双向链表结构
  • dict.c 主要对于内存中的hash进行管理
  • sds.c 用于对字符串的定义
  • sparkline.c 一个拥有sample列表的序列
  • t_hash.c hash在Server/Client中的应答操作。主要通过redisObject进行类型转换
  • t_list.c list在Server/Client中的应答操作。主要通过redisObject进行类型转换
  • t_set.c set在Server/Client中的应答操作。主要通过redisObject进行类型转换
  • t_string.c string在Server/Client中的应答操作。主要通过redisObject进行类型转换
  • t_zset.c zset在Server/Client中的应答操作。主要通过redisObject进行类型转换
  • ziplist.c ziplist是一个类似于list的存储对象。它的原理类似于zipmap
  • zipmap.c zipmap是一个类似于hash的存储对象

data

  • aof.c AppendOnly File,作用就是记录每次的写操作,在遇到断电等问题时可以用它来恢复数据库状态
  • config.c 用于将配置文件redis.conf文件中的配置读取出来的属性通过程序放到server对象中
  • db.c对于Redis内存数据库的相关操作
  • multi.c用于事务处理操作
  • rdb.c 对于Redis本地数据库的相关操作,默认文件是dump.rdb(通过配置文件获得),包括的操作包括保存,移除,查询等等
  • replication.c 用于主从数据库的复制操作的实现

tool

  • bitops.c 位操作相关类
  • debug.c 用于调试时使用
  • endianconv.c 高低位转换,不同系统,高低位顺序不同
  • help.h 辅助于命令的提示信息
  • lzf_c.c 压缩算法系列
  • lzf_d.c 压缩算法系列
  • rand.c用于产生随机数
  • release.c 用于发步时使用
  • sha1.csha加密算法的实现
  • util.c 通用工具方法
  • crc64.c 循环冗余校验

event

  • ae.c 用于Redis的事件处理,包括句柄事件和超时事件。
  • ae_epoll.c实现了epoll系统调用的接口
  • ae_evport.c 实现了evport系统调用的接口
  • ae_kqueue.c 实现了kqueuex系统调用的接口
  • ae_select.c 实现了select系统调用的接口

baseinfo

  • asciilogo.c redis的logo显示
  • version.h有Redis的版本号

compatible

  • fmacros.h 兼容Mac系统下的问题
  • solarisfixes.h 兼容solary下的问题

main

  • redis.c redis服务端程序
  • redis_cli.c redis客户端程序

net

  • anet.c 作为Server/Client通信的基础封装
  • networking.c 网络协议传输方法定义相关的都放在这个文件里面了

wrapper

  • bio.c background I/O的意思,开启后台线程用的
  • hyperloglog.c 一种日志类型的
  • intset.c 整数范围内的使用set,并包含相关set操作
  • latency.c 延迟类
  • migrate.c 命令迁移类,包括命令的还原迁移等
  • notify.c 通知类
  • object.c 用于创建和释放redisObject对象
  • pqsort.c 排序算法类
  • pubsub.c 用于订阅模式的实现,有点类似于Client广播发送的方式
  • rio.c redis定义的一个I/O类
  • slowlog.c 一种日志类型的,与hyperloglog.c类似
  • sort.c 排序算法类,与pqsort.c使用的场景不同
  • syncio.c 用于同步Socket和文件I/O操作。
  • zmalloc.c 关于Redis的内存分配的封装实现

others

  • scripting.c
  • sentinel.c
  • setproctitle.c
  • valgrind.sh
  • redisassert.h

基本命令

Redis中文网

目录

  • 《数据结构与对象》:数据库键总是一个字符串对象,但是值可以是字符串对象列表对象哈希对象集合对象有序集合对象,本章剖析这五种对象的底层数据结构以及对对象的性能和功能的影响
  • 《单机数据库》:对实现原理、持久化、事件、客户端、服务器等方面做了讲解
  • 《多机数据库的实现》:对赋值、Sentinel、集群三个多机功能进行了介绍
  • :对发布与订阅、事务、Lua脚本、排序、二进制位数组、慢查询日志、监视器进行了讲解