目前我只知道缓存数据的两种方法(我使用PHP,但我认为这同样适用于大多数语言)。

  1. 将缓存保存到文件中
  2. 将缓存保存到大型DB字段

还有其他(也许是更好的)缓存方式,还是真的这么简单?

===============>>#1 票数:2 已采纳

也许您想要更准确地显示您想要缓存的内容。 你有这么多机会缓存:

  • 首先正确调整RDBMS,然后使用图层委派决策来检测相同数据的多个查询(例如,使用AdoDB)访问缓存数据的数据库。
  • 从代码中的循环中提取计算,这样您就不会多次计算相同的值。
  • 使用像APC Cache这样的扩展来预编译PHP代码 这样您就不必为每个请求编译相同的PHP代码。
  • 页面发送给用户 ,确保您正在设置正确的META标签(为世界做好事,不要至少绝对必须使用ETL); 或者可能使动态页面完全静态(具有生成.html页面的批处理); 或者使用像Squid这样的代理缓存。
  • 预取并由此引用所有这些机会,只需在用户不按照您的方式做事时改善用户体验。 例如,在HTML文件中预加载IMG标签,调整RDBMS以进行预筛选,预先计算在数据库中存储复杂计算的结果等。

根据我的经验,我敢打赌,在我们开始谈论缓存之前,你的代码可以得到很多改进。 例如,考虑一下您的网站导航结构如何以及您控制用户体验的程度。 然后使用XDebug之类的工具检查代码。

还要验证您进行SQL查询的程度以及对表的索引编制情况。 然后再次检查您的代码,寻找机会应用规则“多次读,但只写一次”

使用像YSlow这样的简单工具来暗示其他简单的事情需要改进。 再次检查您的代码,寻找将逻辑放入浏览器的机会(通过JavaScript)

===============>>#2 票数:1

您还可以在内存中缓存更高效。 尝试memcached

===============>>#3 票数:0

Seconding memcached,简单的东西做得很好,可以分配和所有爵士乐,如果你也需要它

===============>>#4 票数:0

如果您使用的是Apache,则可以使用mod_rewrite静态缓存您的网页。 假设您使用的是PHP,并且您有“/somepage.php”的请求。 在.htaccess文件中,您输入以下内容:

RewriteEngine on
RewriteCond %{QUERY_STRING} ^$ # let's not cache urls with queries
RewriteCond %{REQUEST_METHOD} ^GET$ # or POST/PUT/DELETE requests
RewriteCond static_cache/%{REQUEST_URI} -s # Check that this file exists and is > 0 bytes
RewriteRule (^.*$) static_cache$1 [L] # If all the conditions are met, we rewrite this request to hit the static cache instead

如果你的缓存变空了,请求会像往常一样由你的php脚本处理,所以现在只需要让你的php脚本将生成的html存储在缓存中。 最简单的方法是使用另一个htaccess规则来预先添加几个php文件到你的所有php请求(这可能是也可能不是一个好主意,具体取决于你的应用程序):

php_value auto_prepend_file "pre_cache.php"
php_value auto_append_file "post_cache.php"

然后你会做这样的事情:

pre_cache.php:

ob_start();

post_cache.php:

$result = ob_get_flush();
if(!$_SERVER['QUERY_STRING']) { # Again, we're not caching query string requests
  file_put_contents("static_cache/" + __FILE__, $result);
}

在.htaccess文件中有一些额外的正则表达式,我们也可以开始缓存查询字符串请求,但我会把它作为读者的练习:)

  ask by Teifion translate from so

未解决问题?本站智能推荐: