Memcache:代码层次类似于Hash
- 支持简单数据类型
- 不支持数据持久化存储
- 不支持主从
- 不支持分片
Redis(底层使用C语言编写)
- 属于类型丰富
- 支持数据磁盘持久化存储
- 支持主从
- 支持分片
为什么Redis这么快?
- 完全基于内存,绝大部分请求时纯粹的内存操作,执行效率高
- 数据结构简单,对数据操作也简单
- 采用单线程(串行,不会有锁的消耗问题),单线程也能处理高并发请求,想多核也可启动多实例
- 使用多路复用I/O复用,非阻塞IO
FD(文件描述符):一个打开的文件通过唯一的描述符进行引用,该描述符是打开文件的元数据到文件本身的映射
多路I/O复用模型
Redis会采用哪个I/O多路复用函数:epoll/kqueue/evport/select?
- 因地制宜
- 优先选择时间复杂度O(1)的I/O多路复用函数作为底层实现
- 以时间复杂度为O(n)的select作为保底
- 基于react设计模式监听I/O事件