gpt4 book ai didi

node.js - Redis 使用 node.js 占用内存

转载 作者:可可西里 更新时间:2023-11-01 11:21:51 25 4
gpt4 key购买 nike

我正在尝试使用 redis 作为存储,但它占用了我的内存。我每秒有几次数据存储在 redis 中。该数据在不断变化,我假设因为它改变了不同的值,而不是更新 redis 中的当前值。我想要做的是找到一种方法来删除旧值或在数据传入时更新值。我不能使用 flushall 或简单的清除,因为我需要最新的数据信息来保留在 redis 中。这就是我尝试在函数中实现 client.expire 的方法,但是因为这个函数被调用得如此频繁,它陷入了一个永无止境的刷新系统循环。这是我正在处理的代码片段:

function in_redis(temp_streamName, temp_accelX, temp_accelY, temp_accelZ, temp_geoLat, temp_geoLon, temp_time)
{
var child_info = child.fork(__dirname + '/child_proccessors/child_db'); // Acces the sub process in the folder specified
// console.log(jsonResult);
// console.log("in-redis-streamName: "+ temp_streamName);
// console.log("in-redis-temp_accelX: "+ temp_accelX);
// console.log("in-redis-temp_accelY: "+ temp_accelY);
// console.log("in-redis-temp_accelZ: "+ temp_accelZ);
// console.log("in-redis-temp_geoLat: "+ temp_geoLat);
// console.log("in-redis-temp_geoLon: "+ temp_geoLon);
// console.log("in-redis-timestamp: "+ temp_time);

client.hmset(temp_streamName,"streamName",temp_streamName,"AccelX",temp_accelX,"AccelY",temp_accelY,"AccelZ",temp_accelZ,"GeoLat", temp_geoLat, "GeoLon", temp_geoLon, "Timestamp",temp_time, redis.print);
client.hget(temp_streamName, "streamName", redis.print); //printing redis data
client.hget(temp_streamName, "AccelX", redis.print); //printing redis data
client.hget(temp_streamName, "AccelY", redis.print); //printing redis data
client.hget(temp_streamName, "AccelZ", redis.print); //printing redis data
client.hget(temp_streamName, "GeoLat", redis.print); //printing redis data
client.hget(temp_streamName, "GeoLon", redis.print); //printing redis data
client.hget(temp_streamName, "Timestamp", redis.print); //printing redis data

//send the data to the client server using the sockets
io.sockets.emit('Sensor', {"streamName": temp_streamName, "AccelX": temp_accelX, "AccelY": temp_accelY, "AccelZ": temp_accelZ, "GeoLat":temp_geoLat, "GeoLon":temp_geoLon, "Timestamp":temp_time});
//send the data to the child process so it can be stored in mongo
child_info.send({"streamName": temp_streamName, "AccelX": temp_accelX, "AccelY": temp_accelY, "AccelZ": temp_accelZ, "GeoLat":temp_geoLat, "GeoLon":temp_geoLon, "Timestamp":temp_time});
}

任何帮助都会很棒

最佳答案

如果您想更新值,只需为哈希使用相同的名称,而不是每次都生成不同的 temp_streamName。

如果您更喜欢在任何情况下创建新值,您始终可以使用 expire 命令并为 temp_streamName 哈希设置一个过期时间(在您发出 hmset 命令之后)。该值将在您设置的时间后过期。

第三种选择是让 redis 耗尽内存并在内存满时释放最少使用的值。您需要更改 redis 配置文件中的配置。如果您想同时使用 Redis 来存储临时数据和永久数据,最后一个选项并不是一个好主意。

关于node.js - Redis 使用 node.js 占用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25380366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com