我试着在我的Redis上加载一些重载,以便测试并找出任何上限。首先,我加载了大小为32个字符的50,000和100,000个键,值大约为32个字符。两种密钥大小都不超过8-15秒。现在,我尝试将4kb的数据作为每个键的值。前10000个密钥需要800毫秒才能设置。但从这一点开始,它逐渐变慢,设置整个50,000个关键点大约需要40分钟。我正在使用NodeJs和node_redis (Mranney)加载数据库。是我做错了什么,还是Redis在处理4KB的大值时有那么慢?
我现在发现的另一件事是,当我运行与当前客户端并行的另一个客户端并更新密钥时,第二个客户端在8秒内完成了50000个具有4kb值的密钥的加载,而第一个客户端仍然永远在做它的事情。是node中的bug还是redis库中的bug?这是令人担忧的,对于生产来说是不可接受的。
发布于 2011-04-25 17:51:36
在从节点向Redis进行批量写入时,您需要获得某种反压力。默认情况下,节点将对所有写入进行排队,并且不会强制设置传出队列大小的上限。
node_redis有一个“排出”事件,你可以通过监听来实现一些基本的背压。
发布于 2011-04-19 08:56:57
默认的redis配置没有针对这种用法进行优化。我怀疑您让它以32字节的页面大小交换到磁盘,这意味着添加的每个键都必须找到128个连续的空闲页面,并可能最终使用系统VM或需要大量扩展交换文件。
当您更新密钥时,空间已经分配,因此您不会看到任何性能问题。
发布于 2011-04-21 06:03:24
因为我在NodeJs中做了大量的设置(键值),这是异步完成的,所以很多套接字连接是并发打开的。NodeJs套接字写入缓冲区可能过载,GC可能会扰乱节点进程。
PS:我按照Tom的建议更改了redis的内存配置,但它的性能仍然没有改变。
https://stackoverflow.com/questions/5709866
复制相似问题