其实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的存储对象。它的原理类似于zipmapzipmap.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.c
sha加密算法的实现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
基本命令
目录
- 《数据结构与对象》:数据库键总是一个字符串对象,但是值可以是字符串对象、列表对象、哈希对象、集合对象、有序集合对象,本章剖析这五种对象的底层数据结构以及对对象的性能和功能的影响
- 《单机数据库》:对实现原理、持久化、事件、客户端、服务器等方面做了讲解
- 《多机数据库的实现》:对赋值、Sentinel、集群三个多机功能进行了介绍
- :对发布与订阅、事务、Lua脚本、排序、二进制位数组、慢查询日志、监视器进行了讲解