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

8 浏览
0 Comments

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

有这样一个场景,1000个请求要求Redis获取名为goods_stock的键,并在同一时间将键的值设置为goods_stock-1。Redis服务器如何处理这些请求?它是否处理一个默认队列,就像每个请求都是一个阻塞请求一样?

0
0 Comments

Redis是单线程的,这是因为在服务器端Redis本身是单线程的。Redis中的所有操作都是原子的,因此在Redis端它的工作方式就像是顺序执行一样。

关键点如下所述:

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


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

Redis很少会成为瓶颈,因为通常Redis要么是内存绑定的,要么是网络绑定的。例如,使用Redis的流水线机制在平均的Linux系统上可以每秒传输100万个请求,因此如果应用程序主要使用O(N)或O(log(N))的命令,很难使用太多的CPU。

然而,为了最大化CPU的使用率,您可以在同一台机器上启动多个Redis实例,并将它们视为不同的服务器。在某些情况下,单个服务器可能已经不够用了,所以如果要使用多个CPU,可以考虑一些早期的分片方式。

您可以在分片页面上找到更多有关使用多个Redis实例的信息。

然而,从Redis 4.0开始,我们开始将Redis变得更加多线程化。目前只限于在后台删除对象和通过Redis模块实现的阻塞命令。在未来的版本中,计划将Redis变得越来越多线程化。

可以查看以下文章以获取更多详细信息:

0