language agnostic -除了文件或数据库之外,还有哪些缓存方法可用?

Translate

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

  1. 将缓存保存到文件
  2. 将缓存保存到大数据库字段

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

This question and all comments follow the "Attribution Required."

所有的回答

Translate

也许您想更精确地明确要缓存的内容。您有所有这些机会可以缓存:

  • 访问数据库您首先在其中缓存数据,然后首先正确调整RDBMS,然后使用一层委托决策来检测同一数据的多个查询(使用数据库例如。)
  • 从代码循环中提取计算因此您不会多次计算相同的值。这是您的第三种方式:将结果存储在用户的会话中。
  • 预编译PHP代码带有扩展名APC缓存。这样,您不必为每个请求编译相同的PHP代码。
  • 发送给用户的页面确保您设置了正确的META标签(对世界有利,并且至少绝对不需要使用ETL);或者可能使动态页面完全静态(具有生成.html页面的批处理);或者或使用类似的代理缓存乌贼.
  • 预取因此,我指的是您通过做一些事情而用户看不到自己的方式来改善用户体验的所有机会。例如,在HTML文件中预加载IMG标记,调整RDBMS以进行预染,预计算结果以将复杂的计算存储在数据库中,等等。

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

还要验证执行SQL查询的性能以及对表的索引的性能。然后再次检查您的代码以寻找机会应用规则“多次读取但仅写入一次”

使用简单的工具,例如慢速暗示其他需要改进的地方。再次检查代码,寻找机会在浏览器中放置逻辑(通过JavaScript)

来源
Seb
Translate

您还可以缓存在内存中,效率更高。尝试记忆快取.

来源
Translate

其次,使用memcached可以很好地完成简单的工作,并且如果需要的话,还可以进行分布式和所有爵士乐

来源
Translate

如果您使用的是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脚本存储在缓存中即可。最简单的方法是使用另一个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文件中添加一些其他正则表达式,我们可能也可以开始缓存查询字符串请求,但是我将其留给读者练习:)

来源