我正在寻找Redis,以便为我提供一个中间高速缓存存储,其中包含有关交集和并集之类的集合操作的大量计算信息。
我查看了redis网站,发现redis不是为多核CPU设计的。我的问题是,为什么会这样呢?
另外,如果是,我们如何在多核CPU上使用Redis来100%利用CPU资源。
我查看了redis网站,发现redis不是为多核CPU设计的。 我的问题是,为什么会这样?
这是设计决定。
Redis是带有epoll / kqueue的单线程,并且在I / O并发方面可以无限扩展。 -@ antirez(Redis的创建者)
选择事件驱动方法的原因是线程之间的 同步 是以软件(代码复杂性)和硬件级别(上下文切换)为代价的。除此之外,Redis的瓶颈通常是 网络 ,而不是CPU。另一方面,单线程体系结构有其自身的优势(例如,原子性的保证)。
因此,对于像Redis这样的 高效 且 可扩展的 系统,事件循环似乎是一个不错的设计。
Redis 跨多个核心扩展的方法是 分片 ,主要是与Twemproxy一起使用。
但是,如果由于某种原因仍要使用多线程方法,请看一下Thredis,但要确保了解其作者所做的工作(例如,不能将其用作复制主文件)。