如何缓存自动建议组件的结果?

Mis*_*hko 2 javascript ajax caching http node.js

我有一个 UI 自动建议组件,它按照用户类型执行 AJAX 请求。例如,如果用户键入mel,则响应可能是:

{
  suggestions: [{
    id: 18,
    suggestion: 'Melbourne'
  }, {
    id: 7,
    suggestion: 'East Melbourne'
  }, {
    id: 123,
    suggestion: 'North Melbourne'
  }]
}
Run Code Online (Sandbox Code Playgroud)

UI 组件实现客户端缓存。因此,如果用户现在单击bmelb检索结果),然后Backspace,浏览器已经mel在内存中具有结果,因此它们可以立即可用。换句话说,每个客户端对每个给定的输入最多进行一次 AJAX 调用。

现在,我想在此之上添加服务器端缓存。因此,如果一个客户端对 执行 AJAX 调用mel,并且假设正在进行一些繁重的计算来准备响应,则其他客户端将在不再次执行此繁重计算的情况下获得结果。

我可以简单地获得查询和结果的散列,但我不确定这是实现这一目标的最佳方式(内存问题)。数据集中有大约 20000 条建议。

实现服务器端缓存的最佳方法是什么?

Bli*_*ixt 5

您可以使用 LRU(最近最少使用)丢弃算法实现一个简单的缓存。基本上,设置一些阈值(例如:100,000 个项目,1 GB),然后丢弃最近最少使用的项目(即缓存中的项目,但上次访问的时间比其他任何项目都要早)。这实际上非常有效,我相信您可以使用现有的 Node.js 包

如果您要构建具有多个前端服务器的服务,在服务器上设置memcached可能会更容易更简单(如果您的服务器负载相对较低,甚至可以将其放在前端服务器上) . 它有一个非常简单的 TCP/IP 协议,并且有可用于 Node.js的memcached 客户端

Memcached 易于设置并且可以扩展很长时间。将缓存保存在单独的服务器上还具有加速所有前端实例的请求的潜在好处,即使是那些之前没有收到特定请求的实例。

无论您选择做什么,我都建议将缓存排除在为请求提供服务的进程之外。如果您有缓存问题或出于某种原因需要释放内存,这可以很容易地杀死缓存。