Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.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 在nodejs中设计一个简单的缓存管理器来管理磁盘上的文件_Node.js_Caching_Redis_Lru - Fatal编程技术网

Node.js 在nodejs中设计一个简单的缓存管理器来管理磁盘上的文件

Node.js 在nodejs中设计一个简单的缓存管理器来管理磁盘上的文件,node.js,caching,redis,lru,Node.js,Caching,Redis,Lru,我的服务器接收输入数据并生成输出文件。我需要缓存这个输出文件,当用户再次请求输入时,服务器将立即返回输出文件。缓存管理器需要: 条目:inputId->已处理文件(缓存文件)的路径 许多服务器进程可以同时设置和获取缓存项 限制缓存文件的总大小,如果磁盘已满,请删除旧的缓存文件 缓存的文件过期并在一段时间后删除。若缓存命中,则重置缓存文件的过期时间 服务器进程可能会崩溃,或者计算机可能随时关闭。缓存管理器可以丢弃不正确的数据,但保留有效的缓存文件 现在,我使用redis作为LRU缓存 inp

我的服务器接收输入数据并生成输出文件。我需要缓存这个输出文件,当用户再次请求输入时,服务器将立即返回输出文件。缓存管理器需要:

  • 条目:inputId->已处理文件(缓存文件)的路径
  • 许多服务器进程可以同时设置和获取缓存项
  • 限制缓存文件的总大小,如果磁盘已满,请删除旧的缓存文件
  • 缓存的文件过期并在一段时间后删除。若缓存命中,则重置缓存文件的过期时间
  • 服务器进程可能会崩溃,或者计算机可能随时关闭。缓存管理器可以丢弃不正确的数据,但保留有效的缓存文件
现在,我使用redis作为LRU缓存

  • inputId->filePath和过期时间
  • 排序集:inputId->文件的上次访问时间
  • 将3个lua脚本写入setCache(inputId,filePath)、getCache(inputId)、removeCache(inputId)
  • 定期检查磁盘空间以删除最近使用最少的文件
  • 侦听redis密钥过期以删除文件缓存的事件
总的来说,我觉得我的实现不够强大,无法处理进程/计算机重启/崩溃。我打算将缓存索引保存到数据库中。
我需要一些关于我的设计的意见。我需要重新发明轮子吗?(stackoverflow不允许查找库或文档)

lua脚本是否与带有LOAD和EVAL的redis服务器一起运行?是。redis客户端使用load和eval命令在redis服务器中运行lua脚本。lua脚本是否与具有load和eval的redis服务器一起运行?是。redis客户端使用load和eval命令在redis服务器中运行lua脚本。