目前我只知道两种缓存数据的方法(我使用 PHP,但我认为这同样适用于大多数语言)。
- 将缓存保存到文件
- 将缓存保存到大型数据库字段
有没有其他(也许更好)的缓存方式,还是真的就这么简单?
目前我只知道两种缓存数据的方法(我使用 PHP,但我认为这同样适用于大多数语言)。
有没有其他(也许更好)的缓存方式,还是真的就这么简单?
也许您想更准确地明确您想要缓存的内容。您有所有这些机会进行缓存:
根据我的经验,我敢打赌,在我们开始讨论缓存之前,您的代码可以改进很多。例如,考虑一下您网站的导航结构有多好以及您对用户体验的控制有多好。然后使用XDebug 之类的工具检查您的代码。
还要验证您进行 SQL 查询的情况以及索引表的情况。然后再次检查您的代码以寻找机会应用规则“多次阅读但只写一次”
使用像YSlow这样的简单工具来提示其他需要改进的简单事情。再次检查您的代码,寻找将逻辑放入浏览器的机会(通过 JavaScript)
您还可以缓存在内存中,效率更高。试试memcached。
借调 memcached,把简单的东西做得很好,如果你也需要它,可以去分发和所有爵士乐
如果您使用的是 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 文件中的一些额外的正则表达式,我们可能也可以开始缓存查询字符串请求,但我将把它作为练习留给读者:)