-
Notifications
You must be signed in to change notification settings - Fork 15
Expand file tree
/
Copy path1
More file actions
41 lines (17 loc) · 1.89 KB
/
1
File metadata and controls
41 lines (17 loc) · 1.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#简介
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
#趋势