Node.js 大量键值集使redis中的连接速度变慢
当我将一百万个Redis密钥保存为键值时Node.js 大量键值集使redis中的连接速度变慢,node.js,redis,Node.js,Redis,当我将一百万个Redis密钥保存为键值时 ( Ex: TestKey:1 => 12, ...TestKey:1000000 => 24 ) 连接到我的Redis服务器大约需要8-20秒。Redis有什么限制吗 我不想使用HMSET,因为我想为这些密钥设置expire 你们能给我解释一下发生了什么事吗 (Redis正在Docker中运行) 谢谢。您可以查看“Redis有多快?” 下面是执行一百万个set命令,它是75K rps redis-benchmark -n 1000000
( Ex: TestKey:1 => 12, ...TestKey:1000000 => 24 )
连接到我的Redis服务器大约需要8-20秒。Redis有什么限制吗
我不想使用HMSET
,因为我想为这些密钥设置expire
你们能给我解释一下发生了什么事吗
(Redis正在Docker中运行)
谢谢。您可以查看“Redis有多快?”
下面是执行一百万个set
命令,它是75K rps
redis-benchmark -n 1000000 -t set -q
SET: 74693.76 requests per second
如果每个管道使用16个命令,则为845K rps(11x)
每个管道有64条命令,达到118万rps(15x)
因此,如果您想执行大量set命令,可以使用管道
根据单个管道中的命令数量,将速度提高10到15倍。谢谢您的回复。我试着调试代码,看到超时错误不断地发出垃圾邮件<代码>错误:Redis与Redis:6379的连接失败-连接ETIMEDOUT 10.0.59.5:6379
@HVD它更可能与我不熟悉的网络、配置、docker设置等有关(我重点关注Redis的慢度问题)。如果你再问一个问题会更有帮助,在这方面有更多经验的人可以帮助你。谢谢你。我不知道为什么会这样。把所有的钥匙都清理干净,一切又好了。而且当有很多数据时速度很慢。@HVD可能与docker映像的配置有关-您可以使用info memory
、memory doctor
或slowlog
命令进行检查以识别。谢谢你的建议。我通过改变图书馆解决了这个问题。似乎命令quit()
根本不起作用。您有多少连接?阅读这篇关于1000-2000连接的有用文章,我仍然不明白当我的Redis DB变得更大时它为什么会变慢。当Redis DB很小时,它可以正常工作。一个原因可能是您的值的大小,较大的值将导致更多的IO。因此,Redis主线程需要更多的阻塞时间@HVD2。而且2000连接太多了。这个数量的连接将浪费Redis主线程的时间(管理连接)。您应该使用代理(如twemproxy)或复制您的Redis实例。别忘了,连接是很昂贵的。打开几个连接并在应用程序的进程之间共享它们将是一个非常好的方法@谢谢你的建议。似乎我的问题是调用client.quit()
时Redis库没有关闭连接quit()
命令在dev env中工作,而不在生产环境中工作。我通过改变图书馆解决了这个问题。
redis-benchmark -n 1000000 -t set -P 16 -q
SET: 845308.56 requests per second
redis-benchmark -n 1000000 -t set -P 64 -q
SET: 1175088.12 requests per second