Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

50 lines (19 sloc) 1.983 kb

简介

Redis(REmote DIctionary Server)是一个开源的键-值内存数据库,与它类似的有memcachedTokyo Cabinet等。Redis 以支持丰富的数据结构著称,同时兼具主从复制、持久化等高可用特性,与程序无缝的结合。

第三方库依赖

memcached 使用libevent这个已经不那么轻量级的网络事件库,而 Redis 本身不依赖任何第三方的函数库,无论是网络事件、哈希表,数据结构都是自己实现的,全部代码只有 2w 行,算是一个小型的项目,代码清晰,阅读起来非常的流畅,甚至都无须 debug 调试来辅助理解。

从哪里开始

本书将对其的源代码进行分析,版本为 2.4.16。下载源代码解压 redis-2.4.16.tar.gz 包后,进入redis目录,我们从src/Redis.c的主函数开始我们代码旅行。

推荐读者使用cscope这样可以很方便的从函数之间跳转,如何使用cscope可见附录1,如何设置vim的快捷键可见附录2。

为何redis是单线程?

由于支持复杂的数据结构,所以如果采用多线程,将非常的麻烦,试想一个双链表,要支持多线程将多么的复杂。

Redis 并不是一个fit all的键-值数据库,单线程意味着任何一个客户端连接的处理速度影响的全局的性能,所以一些较消耗性能的操作(set的操作或者zset的排序操作)都尽量放到备库。

受内存限制的特点使得目前 Redis 不能成为处理海量数据的 total solutions,而仅仅是一个复杂大型系统里的一部分。

缺陷

Redis 有很多缺陷,比如无法做到双主库,无法进行同步复制(当然这些都是可以改进的),复制无法做增量复制,复制容易受网络的影响, 无完美的集群方案,但这不影响 Redis 成为一个优秀的可信赖的组件。

同类项目

memcached

tc

趋势

scripting

cluster

Jump to Line
Something went wrong with that request. Please try again.