Redis 是单线程的, 为上下文切换线程节省了大量时间.
那么, 为什么 Redis 是单线程的?
一, 官网解释
由于 Redis 是基于内存的操作, 因此 CPU 并不是 Redis 的瓶颈. Redis 的瓶颈很可能是机器内存或网络带宽的大小. 既然单线程易于实现并且 CPU 不会成为瓶颈, 那采用单线程解决方案是合乎逻辑的了.
二, 详细原因
1, 不需要各种锁的性能消耗
Redis 的数据结构并非全都是简单的键值 (Key-Value), 而是有复杂的结构, 如列表(list) 和哈希 (hash). 这些结构可以执行细粒度的操作, 例如在长列表后面添加元素并将其添加到哈希(hash) 或删除对象.
这些操作可能需要非常大量的锁, 从而导致同步开销显著增加. 简而言之, 在单线程的情况下, 不需要考虑各种锁, 没有锁释放操作, 也没有由于可能的死锁而导致的性能消耗.
2, 单线程多进程集群方案
单线程的功能实际上非常强大, 每个内核的效率也很高. 与单线程相比, 多线程自然可以具有更高的性能限制. 但是, 在当今的计算环境中, 甚至单机多线程限制通常也无法满足. 需要进一步探索的是多服务器群集群方案, 并且这些方案中的多线程技术仍然是不可用的.
3,CPU 消耗
采用单线程, 避免了不必要的上下文切换和竞争条件, 也不存在多进程或者多线程导致的切换而消耗 CPU. 但是如果 CPU 成为 Redis 瓶颈, 或者不想让服务器其他 CUP 核闲置, 那怎么办?
可以考虑多起几个 Redis 进程, Redis 是 key-value 数据库, 不是关系数据库, 数据之间没有约束. 只要客户端分清哪些 key 放在哪个 Redis 进程上就可以了.
更多 web 开发 https://www.html.cn/ 知识, 请查阅 HTML 中文网 !!
来源: http://www.css88.com/qa/other/19489.html