Redis 深度学习(1)
August 8, 2017
如果人生没有看过一个数据库的源码,那与咸鱼有什么区别。
准确的说,我所会写的代码都是从别人那里看来的。但是我所会写的代码就那么点儿,实在不怎么拿得出手。刚好遇到这个源码只有2万多行的纯C语言的数据库项目,怎么都得读读,否则不敢说自己会写代码。
Redis 简介 #
在之前有一篇关于redis的简介和安装的文章,所以就不从宏观上介绍了。
与memcached相比有下面这几个特点:
- Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,zset,hash等数据结构的存储。
- Redis支持数据的备份,即master-slave模式的数据备份。
- Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
- Redis可以实现主从复制,实现故障恢复。
- Redis的Sharding技术: 很容易将数据分布到多个Redis实例中
Redis是单线程的,运行在CPU的一个核上。所以在线程的思路上整个程序是很清晰的。我主要从代码中学习一些网络编程的方法,C语言数据结构的写法,内存操作。
在redis4.0.1中一共有600多个文件,包含了C文件、bash脚本、Lua脚本、tcl脚本,额,,还有一些没见过的东西。太菜了,连文件后缀都没见过。
但是这些并不都是redis的代码,在src/
文件夹中可以看到只有120多个c文件,这些才是核心。600多个是包含了一些测试文件和单元测试等等。
Redis的数据结构 #
redis对外提供的数据结构在上一篇中也都介绍过,这里带着介绍一下其内部实现的方式。