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就是当对数据库修改时,就记录下来。
复制