Redis 如何处理 1000 个并发请求?



有一个场景,1000 个请求要求 Redis 获取名称为 goods_stock 的密钥,同时在 Redis 中将密钥的 vaule 设置为等于 goods_stocks-1,Redis 服务器如何处理这些请求?它是否处理默认队列,就像每个请求都是块请求一样?

您的应用程序可以是多线程的,但在服务器端 Redis 本身是单线程的。Redis 中的所有操作都是原子操作。所以它在 Redis 端的工作方式就像顺序一样。 这里引用关键点:

Redis 操作是原子操作这一事实只是单线程事件循环的结果。有趣的是,无需额外费用即可提供原子性(它不需要同步)。用户可以利用它来实现乐观锁定和其他模式,而无需支付同步开销。


Redis 是单线程的。如何利用多个 CPU/内核?

CPU 成为 Redis 瓶颈的情况并不常见,因为通常 Redis 要么是内存限制,要么是网络绑定的。例如,使用流水线 在普通 Linux 系统上运行的 Redis 每秒甚至可以交付 100 万个请求,因此如果您的应用程序主要使用 O(N) 或 O(log(N)) 命令,它几乎不会使用太多 CPU。 但是,为了最大限度地提高 CPU 使用率,您可以在同一框中启动多个 Redis 实例,并将它们视为不同的服务器。在某些时候,一个盒子可能还不够,所以如果你想使用多个CPU,你可以开始考虑一些更早的分片方法。 您可以在分区页面中找到有关使用多个 Redis 实例的更多信息。 然而,在 Redis 4.0 中,我们开始使 Redis 更加线程化。目前,这仅限于在后台删除对象,以及阻止通过 Redis 模块实现的命令。对于下一个版本,计划是使 Redis 越来越线程化。

Hava 查看以下帖子以获取更多详细信息:

  • Redis 是单线程的,那么它是如何做并发 I/O 的呢?

最新更新