HTTP缓存。
如果我说HTTP Cache用于向客户端发送或不发送内容(正文,而不是头部;),我说的对吗?它有助于减少服务器和客户端之间传输的数据数量,但不会减少服务器上的负载。HTTP缓存甚至不需要这样做。这不是它的问题。所以HTTP缓存并不关心服务器端。
这就是问题所在。减少服务器负载的最好方法是什么?简化思想-如果我们不打算将内容发送到客户端,为什么我们要生成响应内容。如果我们得到的数据不会被发送到客户端,为什么我们要对数据库执行繁重的查询。是的,我们必须找出请求的数据是否被修改。也许我们可以用某种方式存储这些信息?但如果我们谈论的是高度动态的数据。例如,我们必须缓存检索一堆照片的请求,我们可以放置过滤器(按距离-大约1000米,按时间-在1小时内,按类别,... )和排序参数(按距离-最近的客户端,按时间,...)在照片上。同一张照片可以得到不同参数的不同反应。
发布于 2012-11-17 18:37:03
我们有一个请求:http://api.myproject/timeline?lat=41.00001&lon=35.80012&category=1&timelimit=60&distance=1000。我们必须为这个请求创建一个唯一的标识符。我们基于GET params创建此标识符-例如,request_key。当我们获取响应数据时(执行DB查询,准备响应数据,等等)我们必须为获取的数据计算哈希- data_key。现在我们有两个键-查询标识符和数据键。我们存储这两个键和对象id。它可以也必须是一个快速存储: memcache或redis。之后,我们向客户端发送一个响应,并将带有data_key的Etag放入报头。当客户端再次请求获取数据时,我们将生成请求键,尝试在memcache中查找该键的值。如果我们发现请求键和Etag (取自hreader)与data_key匹配,我们就知道这个请求的数据没有改变,只向客户端返回304Http代码。当一个对象改变时,我们必须从这个对象发生的memcache中删除所有存储的对request_key和data_key。出于这个原因,我们使用对(request_key,data_key)来存储对象id。
https://stackoverflow.com/questions/13429592
复制相似问题