我在虚拟机上使用 Redis,无法决定应该为它们分配多少个核心。
我知道 Redis 使用单线程来处理请求,但文档也指出某些任务由不同的线程/进程在后台执行。
我可以分配比所需更多的核心而不会浪费资源,但我不喜欢超出理论限制的想法,我认为在这种情况下存在这种限制。
到目前为止我想到了这个:
- 1 个核心用于处理实际请求
- 1 核心如果https://redis.io/topics/persistence已启用(RDB 或 AOF 或两者)
- 1 个核心用于异步内存回收https://redis.io/commands/unlink(此外,我相信我在某处读到过,如果密钥大小超过某个阈值,DEL 的行为也会相同)
- 1 个操作系统核心
我是不是漏掉了什么?Redis 是否还有其他可以利用额外核心的任务?也许是复制或流?
答案1
从命令执行的角度来看,Redis 基本上是一个单线程服务器(实际上,现代版本的 Redis 使用线程来执行不同的事情)。请浏览以下链接。HRedis 有多快?。stackoverflow 上也有一篇相同的帖子 -Redis是单线程的,那么它如何进行并发I/O?
答案2
请检查此网址https://redis.io/topics/benchmarks,
“Redis 的设计初衷并不是从多核 CPU 中获益。如果需要,人们应该启动多个 Redis 实例,以便在多个核上进行扩展。将单个 Redis 实例与多线程数据存储进行比较并不公平。”
“CPU 是另一个非常重要的因素。由于是单线程的,Redis 更倾向于使用具有大缓存的快速 CPU,而不是多核 CPU。在这场比赛中,英特尔 CPU 目前是赢家。与类似的 Nehalem EP/Westmere EP/Sandy Bridge Intel CPU 相比,在 AMD Opteron CPU 上获得的性能只有 Redis 的一半,这并不罕见。当客户端和服务器在同一台机器上运行时,CPU 是 redis-benchmark 的限制因素。”
答案3
只需使用单核虚拟机。Redis 不会使用额外的核心。