1

HTTP 缓存。

如果我说 HTTP 缓存是用于发送还是不发送内容(正文,而不是标题;))给客户端,我是对的吗?它有助于减少服务器和客户端之间传输的数据数量,但不会减少服务器上的负载。HTTP Cache 甚至不需要这样做。这不是它的问题。所以 HTTP Cache 不关心服务器端。

因此问题。减少服务器负载的最佳方法是什么。简化思路——如果我们不打算将该内容发送给客户端,为什么要生成响应内容。如果获取的数据不会发送到客户端,我们为什么要对数据库执行繁重的查询。是的,我们必须查明请求的数据是否被修改。也许我们可以以某种方式存储这些信息?但是,如果我们谈论的是高度动态的数据。例如,我们必须缓存检索一堆照片的请求,我们可以放置过滤器(按距离 - 大约 1000 米,按时间 - 1 小时内,按类别,...)和排序参数(按距离 - 最近给客户,按时间,...)在照片上。同一张照片可能会以不同的参数得到不同的响应。

4

1 回答 1

0

我们有这样的要求:http://api.myproject/timeline?lat=41.00001&lon=35.80012&category=1&timelimit=60&distance=1000。我们必须为此请求创建一个唯一标识符。例如,我们正在基于 GET 参数创建此标识符 - request_key。当我们获取响应数据(执行数据库查询,准备响应数据等)时,我们必须计算获取数据的哈希值 - data_key. 现在我们有 2 个键 - 查询标识符和数据键。我们存储这 2 个键和对象 ID。它可以/必须是快速存储:memcache 或 redis。之后,我们向客户端发送响应并将带有 data_key 的 Etag 放入标头中。当客户端再次请求获取数据时,我们将生成请求键,尝试在内存缓存中找到该键的值。如果我们找到请求密钥并且 Etag(取自 hreader)与 data_key 匹配,我们就知道该请求的数据没有更改,并且只是将 304 http 代码返回给客户端。当一个对象改变时,我们必须从这个对象发生的内存缓存中删除所有存储的 request_key 和 data_key 对。出于这个原因,我们将对象 id 与对 (request_key, data_key) 一起存储。

于 2012-11-17T10:37:02.637 回答