tcmalloc(即Thread-Cache Malloc)是一个通用的内存分配器,使用tcmalloc只需要在编译的链接阶段加入-ltcmalloc,而不是使用glibc(ptmalloc2),不需要有任何的代码改动。也就是说用户在使用malloc/free、new/delete时会使用tcmalloc进行内存分配。
Redis支持两种事件,文件事件和时间事件。文件事件用于处理socket请求,时间事件则处理一些定时任务和周期性任务。
Redis基于Reactor模式设计了自己的事件处理器,可以处理文件事件和时间事件。在ae.h和ae.c中分别定义和实现了外部接口。
dict是一个key-value存储的hash map,实际上redis对外提供的key-value服务的底层数据结构就是dict。hash map由一个hash算法来确定数据的在数组中的放置位置,dict使用开链法解决冲突。
Redis中定义三种链表:list、ziplist和quicklist以满足不同使用场景
C语言没有提供像map、set、list等复杂的数据结构,虽然提供了string类型char*, 但是但是效率比较差(主要表现在申请和释放空间上)。因此Redis封装了这些数据结构,当然在封装的时候使用了很巧妙的设计,能够最大化的优化时间和空间复杂度。Redis的性能能够如此优秀,可以说这些数据结构是基石。
Redis(Remote Dictionary Server)是一种开源的高效key-value存储系统,作者是Salvatore Sanfilippo。