繁体   English   中英

在memcached中存储来自node.js的二进制blob

[英]Storing binary blobs from node.js in memcached

我有一个处理动态图像的node.js应用程序。 在某些时候我需要缓存一个图像,我现在只是将它们写入磁盘上的文件。

我正在考虑用memcached替换文件缓存。

所以,我的问题是:有没有办法使用节点的流(ReadableStream / WritableSteam)存储和读取memcached中的二进制数据?

我想要实现的简化示例:

  • 从URL获取数据
  • 将响应流传递给memcached
  • 稍后阅读并将其传输到另一个http响应中

更新:我了解到memcached对可以存储的值有固定的大小限制,这使得它不适合我的用例。

我会研究像Redis这样的其他技术,看看我能用它做些什么。

好的,你的问题的简单答案是肯定的。 是的,有一种方法可以使用节点流向/从memcached存储/读取二进制数据。 “如何”是更难的部分。

NodeJS是解决这类问题的特殊平台。 使用Stream系统的好处是,当从memcached服务器来回传递图像时,节点实例将不会使用太多内存,但是这个古老的问题出现了:这是你想要的吗?

我不是memcached的专家,但鉴于我对NodeJS及其memcached协议文档的了解,我确信只要有足够的时间,我就可以编写完全符合我需求的定制流实现......但谁有时间?

有一些竞争的memcached模块,有一个非常好的SO答案,总结了这里的差异: https//stackoverflow.com/a/10430328/690826

那个答案暗示了mc模块,乍一看似乎没有公开流接口,而是它有更常见的节点回调api。 这将有一个问题,当一个文件被提供给客户端时,整个文件将在该请求期间在内存中。

现在,我知道我已经说了一次,但我会再说一遍: 这完全取决于你需要什么 如果您的场景意味着您将受内存限制而不是带宽限制,那么您可以a)尝试查找/实现基于流的memcached接口或b)并行化您的节点端点。

这也引出了一个问题,你真的需要memcached吗? 我对此类问题的第一种方法是实现类似https://www.npmjs.org/package/node-static的内容 ,看看你的服务器/服务有多好。

同样,这个建议是根本不知道你的应用程序的大小,所有这些决定应该真正考虑到这个重要的事实。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM