Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
42 additions
and
5 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,41 @@ | ||
#简介 | ||
|
||
redis是一个开源的key-value的内存数据库,与它类似的key-value数据库有memcached,Tokyo Cabinet等。redis以支持丰富的数据结构而著称,还支持主从复制、持久化等高可用特性,可以和程序无缝的结合,而无需像使用关系性数据库一样需要ORM转换成关系型,或者像memcached一样只能使用简单的key-value。 | ||
memcached使用libevent这个已经不那么轻量级的网络事件库,而redis本身不依赖任何第三方的函数库,无论是网络事件、哈希表,数据结构都是自己实现的,全部代码只有2w行,算是一个中小型的项目,代码清晰,阅读起来非常的流畅,甚至都无须debug调试来辅助理解。 | ||
|
||
本文将对其的源代码进行分析,版本为2.2.2。下载源代码解压redis.tar.gz包后,进入redis目录,我们从src/redis.c的主函数开始我们代码旅行。推荐读者使用cscope这样可以很方便的从函数之间跳转,如何使用cscope可见附录1,如何设置vim的快捷键可见附录2。 | ||
Redis(REmote DIctionary Server)是一个开源的键-值内存数据库,与它类似的有 memcached,Tokyo Cabinet 等。Redis 以支持丰富的数据结构著称,同时兼具主从复制、持久化等高可用特性,与程序无缝的结合, | ||
|
||
|
||
##无第三方库依赖 | ||
|
||
memcached 使用 libevent 这个已经不那么轻量级的网络事件库,而 Redis 本身不依赖任何第三方的函数库,无论是网络事件、哈希表,数据结构都是自己实现的,全部代码只有 2w 行,算是一个小型的项目,代码清晰,阅读起来非常的流畅,甚至都无须 debug 调试来辅助理解。 | ||
|
||
|
||
##从哪里开始 | ||
|
||
本书将对其的源代码进行分析,版本为2.4.16。下载源代码解压 redis.tar.gz 包后,进入``redis``目录,我们从``src/Redis.c``的主函数开始我们代码旅行。 | ||
|
||
推荐读者使用 cscope 这样可以很方便的从函数之间跳转,如何使用 cscope 可见附录1,如何设置vim的快捷键可见附录2。 | ||
|
||
|
||
##为何redis是单线程? | ||
|
||
由于支持复杂的数据结构,所以如果采用多线程,将非常的麻烦,试想一个双链表,要支持多线程将多么的复杂。 | ||
|
||
Redis 并不是一个``fit all``的键-值数据库,单线程意味着任何一个客户端连接的处理速度影响的全局的性能,所以一些较消耗性能的操作(set的操作或者zset的排序操作)都尽量移动到备库来处理。 | ||
|
||
受内存限制的特点使得目前Redis不能成为处理海量数据的total solutions,而仅仅是一个复杂大型系统里的一部分。 | ||
|
||
|
||
##缺陷 | ||
|
||
Redis 有很多缺陷,比如无法做到双主库 ,无法进行同步复制(当然这些都是可以改进的)。复制做增量复制,复制容易受网络的影响, 无完美的集群方案,但这不影响 Redis 成为一个优秀的可信赖的组件。 | ||
|
||
|
||
#同类项目 | ||
|
||
##memcached | ||
|
||
##tc | ||
|
||
#趋势 | ||
|
||
|