有一个场景,1000个请求请求redis获取名称为goods_stock的密钥,同时在redis中将密钥的vaule设置为等于goods_stocks-1,redis如何切断处理这些请求?它是否处理默认队列,就像每个请求都是块请求一样?
答案 0 :(得分:1)
您的应用可能是多线程的,但在服务器端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查看以下帖子了解更多详情: