一、redis 和 memcached 区别?
1. redis 支持更复杂的数据类型
redis支持String、List、Hash、Set和SortedSet五种数据类型。
memcached 只支持简单的 key-value 模式
2. redis 原生支持集群模式
redis再3.x版本中,就支持了 cluster 模式。
memcached 如果需要集群,需要通过编码实现,比较复杂。
3. 性能对比
redis是单线程的,多核处理器中只能单核得以利用。memcached 支持多核。
在小数据存储中,redis性能更高。在大数据存储中,memcached性能更优。
二、Redis线程模型
redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。
它采用 IO 多路复用机制同时监听多个 socket,将产生事件的 socket 压入内存队列中,事件分派器根据 socket 上的事件类型来选择对应的事件处理器进行处理。
文件事件处理器的结构包含 4 个部分:
- 多个 socket
- IO 多路复用程序
- 文件事件分派器
- 事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)
多个 socket 可能会并发产生不同的操作,每个操作对应不同的文件事件,但是 IO 多路复用程序会监听多个 socket,会将产生事件的 socket 放入队列中排队,事件分派器每次从队列中取出一个 socket,根据 socket 的事件类型交给对应的事件处理器进行处理。
三、为啥 redis 单线程模型也能效率这么高?
- 纯内存操作。
- 核心是基于非阻塞的 IO 多路复用机制。
- C 语言实现,一般来说,C 语言实现的程序“距离”操作系统更近,执行速度相对会更快。
- 单线程反而避免了多线程的频繁上下文切换问题,预防了多线程可能产生的竞争问题。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏