我们在Ubuntu 13.04上使用Django 1.4 w / Python 2.7 - 尽管这个问题可能与此信息无关。
我有一个要求,我们为我们的网站打了一个非常慢的API。因此,我们的页面往往会加载3-6秒。我们的数据显示,我们在5秒后的保留率接近0%。因此,我正在为我们从第三方API提取的数据实施内存缓存解决方案 - 众所周知,该解决方案每4小时更新一次。
我的问题涉及处理memcache数据集的“最佳实践”。我们通常会为任何给定的请求提取完整数据集的一部分。整个数据集需要大约20分钟才能下降 - 它非常大。
如果可以的话,我想远离增加最大内存缓存单元大小(64 MB)。为此,将数据切分为逻辑单元似乎是合理的。为了提供这个问题的动力,我应该提到最终我将JSONifying数据。举个例子:
{Layer1:
Layer2: {
Layer3: {
Layer4: {
'data1': some_data,
'data2': some_more_data,
'data3': even_more_data,
}
}
}
}
每层有多个数据段(我相信数据嵌入4到6层)。
我认为以Layer1
级别存储是一个好主意,该级别应始终低于64 MB限制。另一个选择是在单个数据级别和密钥存储为Layer1-Layer2-Layer3-Layer4
...不完全优雅,但已经证明可以在我们的系统中使用。
此问题的目的主要是出于基于您对缓存信息的体验的意见。最终,我们的需求一次需要Layer1
级数据中的信息。
如果有充分理由放弃Layer1
级别的缓存,请告知我们。
提前感谢您的意见。
EDIT1:
根据Brent Washburne的回应,我觉得有必要进行详细说明。我处理管理1000个前端网页(登录页面)的大型系统的后端。每个网页都会从此数据集中请求详细信息。用户将输入搜索参数,前端必须查询数据集以获取动态填充结果的信息。
幸运的是,我们的目标网页驻留在与后端服务器相同的Intranet上的服务器上 - 因此请求非常快。
答案 0 :(得分:1)
问题是"我应该存储一些大块数据还是许多小块数据?"如果不了解更多关于分层方案的信息,我会说大量的问题。每个内存缓存请求都是一个网络请求,您可以通过最小化请求来最小化流量。
另一种选择是在您的服务器上缓存网页。在您提取数据后(每四个小时,您说),从数据中写入HTML页面并将其存储在您的Web文件夹中。然后,您的静态页面将立即提供,您将不再需要内存缓存服务器。