Redis性能问题?

我试图把一些沉重的负载放在我的Redis上进行testing,并找出任何上限。 首先我加载了大小为32个字符的大小为32个字符的50,000和100,000个键。 这两个关键尺寸都花了不到8-15秒。 现在我试着把4kb的数据作为每个键的值。 首先10000个按键需要800毫秒设置。 但是从这个angular度来看,它逐渐变慢,设置5万个键需要40分钟。 我正在用node_redis(Mranney)加载数据库。 我正在做什么错误,或者是Redis的大小是4 KB?

我现在发现的另一件事情是,当我运行另一个客户端并行到当前一个,并更新密钥第二客户端完成在8秒内加载4万个值的50000密钥,而第一个客户端仍然永远做它的事情。 这是在节点或Redis库中的错误? 这是令人震惊的,不能接受的生产。

您需要获得一些背负压力,以便从节点到Redis进行批量写入。 默认情况下,节点将对所有写入进行排队,并且不对传出队列大小强制执行上限。

node_redis有一个“漏”事件,你可以监听来实现一些基本的背压。

默认的redisconfiguration没有针对这种用法进行优化。 我怀疑你把它交换到磁盘的页面大小为32字节,这意味着每个键添加必须find128个连续的空闲页面,并可能最终使用系统虚拟机或需要扩大交换文件了很多。

更新密钥时,空间已分配,因此您不会看到任何性能问题。

由于我在NodeJs中做了很多设置(键值),这是asynchronous完成的,所以很多套接字连接同时打开。 NodeJs套接字写入缓冲区可能会被重载,并且GC可能会绕过节点进程。

PS:我改变了汤姆build议的redis内存configuration,但仍然performance相同。