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

Y.C*_*ole 3 redis

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

ruh*_*hul 6

您的应用程序可能是多线程的,但在服务器端 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 查看以下帖子了解更多详情: