redis学习小结

redis短小精悍,系统中的瑞士军刀。研究了它的源代码,收获颇多。

1:网络框架

2:各种数据结构的精巧实现

3:持久化

4:复制

 

网络框架

      redis网络框架蛮简单的,redis自己实现了一个事件库,总的框架是:基于事件的单进程。一般大家都觉得现在服务器都是多进程或多线程的,单进程的性能不行。但redis恰恰不同,他就是单进程,而且性能很好。我个人觉着原因有下面几点:

1、redis的内存结构非常复杂,多线程不可避免要加锁,加锁是很大的开销,而单进程避免了这。

2、redis处理的数据的特点,redis所有数据都在内存中,而且每条数据一般很小的,这样每次访问或查找数据花费的时间很少的,所以在服务端串行处理也行得通。

 

各种数据结构的精巧实现

       这是redis最具有特色的地方,redis不当当是key-value,它也实现了其它的数据结构list, hash,set,sort set。实现这些数据结构,并不难,难得是怎样用最少的内存空间来实现这些结构。比如:“123456”这个字符串存储需要6个字节(不算0),而123456这个数只需要4个字节,redis就会把“123456”这样的当作整数存储;在hash表中,如果hash表中的item很少,其实就没必要用hash表在存储,因为一个hash表的额外开销大,对于hash表中item很少的情况,直接使用顺序表存储,这种情况,顺序表中查找也是很快的。这样的技巧在redis用的很多,其目的就是尽可能减少内存使用。

 

持久化

http://redis.io/topics/persistence

持久化有两种方式:RDB和AOF(append of file)

RDB就是把数据库把每个时候的镜像写到磁盘上,这种优点是:服务器加载数据快,传输效率高;缺点是肯能会丢失数据,而且耗时。

AOF就是当对数据库修改时,就记录下来。

复制

http://redis.io/topics/replication

posted @ 2012-08-16 14:01  jiejnan  阅读(464)  评论(0编辑  收藏  举报