Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Redis数据丢失_Node.js_Redis_Data Loss - Fatal编程技术网

Node.js Redis数据丢失

Node.js Redis数据丢失,node.js,redis,data-loss,Node.js,Redis,Data Loss,我们正在将Node.JS与Redis结合使用,我们遇到了数据丢失问题。 我们有统计数据收集系统,所以我们必须收集处理到服务器的每个请求。 对于高并发请求(平均1000/秒),我们在Redis中存在数据丢失问题 我们在Node.JS和Redis中记录了每个请求,问题是Node.JS显示的请求量与发送的请求量完全相同,Redis Monitor调试的请求量相同,但Redis DBSIZE向我们显示的值不正确。它总是比预期少约40%-50% 我们的服务器配置为: Intel® Core™ i7-920

我们正在将Node.JS与Redis结合使用,我们遇到了数据丢失问题。 我们有统计数据收集系统,所以我们必须收集处理到服务器的每个请求。 对于高并发请求(平均1000/秒),我们在Redis中存在数据丢失问题

我们在Node.JS和Redis中记录了每个请求,问题是Node.JS显示的请求量与发送的请求量完全相同,Redis Monitor调试的请求量相同,但Redis DBSIZE向我们显示的值不正确。它总是比预期少约40%-50%

我们的服务器配置为:

Intel® Core™ i7-920 24 GB DDR3 RAM From Hetzner 我们的“平均负载”为0.04,还有大量可用内存(~20gb)


我们将非常感谢您对此问题提供的任何帮助。

您确定,
DBSIZE
应该返回所有密钥吗?您是否使用
命令尝试过相同的操作

编辑: 这可能也有帮助。
第一步是查看有关内存管理的Redis配置。 根据maxmemory和maxmemory策略参数的值,Redis可以从内存中逐出对象。您可能需要检查maxmemory条目是否已注释掉,并且maxmemory策略是否未设置为allkeys-*

然后还应该检查Node.js代码。Node.js是异步的,它可以在处理来自Redis的相应ack数据包之前将大量项目推送到Redis。代码应设计为在某个点限制客户端命令队列中的项目数。您可以计算并比较已发送命令的数量与回复的数量(通过定义回调来计算),以检查这一点


最后,您可能还希望使用Redis命令检查真正发送到Redis服务器的所有通信量是否确实已存储。它可能有助于评估问题是在服务器端还是客户端。

KEYS命令返回的数字与DBSIZE相同,但不正确。我想我发现Node.JS确实是问题所在,或者更准确地说,Node.JS redis driver,Node\u redis。我们已经转移到了mysql内存,它确实提供了相当好的结果。
net.ipv4.conf.all.rp_filter=1
net.ipv4.icmp_echo_ignore_broadcasts=1
net.core.somaxconn = 1280
fs.file-max = 50000
vm.overcommit_memory=1