HTTP缓存。
如果我说HTTP Cache是发送或不发送内容(正文,而不是标题;))给客户端,我是对的吗?它有助于减少服务器和客户端之间传输数据的数量,但不会减少服务器上的负载。 HTTP Cache甚至不需要这样做。这不是问题。所以HTTP Cache并不关心服务器端。
因此问题。什么是减少服务器负载的最佳方法。简化思路 - 如果我们不打算将此内容发送给客户,我们为什么要生成响应内容。如果获取的数据不会发送到客户端,为什么我们应该对数据库执行繁重的查询。是的,我们必须查明请求的数据是否被修改。也许不知怎的,我们可以存储这些信息?但是,如果我们谈论高度动态的数据。例如,我们必须缓存检索一堆照片的请求,我们可以放置过滤器(按距离 - 大约1000米,按时间 - 在1小时内,按类别,......)和排序参数(按距离 - 最近对于客户,按时间,...)在照片上。同一张照片可以通过不同的参数进行不同的反应。
答案 0 :(得分: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。之后,我们向客户端发送响应,并将Etag与data_key放在标头中。当客户端执行另一个获取数据的请求时,我们将生成请求密钥,尝试在memcache中找到该密钥的值。如果我们找到请求密钥并且Etag(取自hreader)与data_key匹配,我们就知道该请求的数据没有更改,只返回304 http代码给客户端。当一个对象被更改时,我们必须从发生此对象的memcache中删除所有存储的对request_key和data_key。出于这个原因,我们使用对存储对象id(request_key,data_key)。