1

我在 MySQL 数据库中有一些数据大部分时间都是静态的。它们主要是几乎静态的值,如城市、州和种族。我想将它们缓存在一个变量中,最好是在内存中,这样我就不需要在每次页面加载时对 MySQL 执行另一个查询。

问题是,我的主机不支持 memcache 也不支持 APC。我能找到的唯一加速器是 eAccelerator,我认为它不会实现我的想法。

有什么办法可以做缓存吗?它是http://www.k-disk.net

谢谢

4

4 回答 4

3

缓存是编程中无处不在的时空权衡的一个很好的例子。您可以通过使用空间来存储结果来节省时间。[1]

在网站上实现缓存的方法有很多。让我们看看它们从前端开始,然后向后端移动,而不涉及太多细节。

HTTP缓存

了解如何使用 HTTP 缓存优化您的网站

应用程序级缓存

这是“昂贵的查询”数据库对象的缓存。例如:memcache、在文件中缓存页面等。

操作码缓存

例如:PHP 加速器、eAccelerator 等。

数据库级缓存

通过根据需要和机器硬件调整其参数来优化数据库。

在您的情况下,我建议使用 my.cnf 进行调整,因为给定足够的 RAM,MySQL 非常快。尽量不要预先优化。

于 2011-07-15T07:21:13.413 回答
2

您可以只将一个文件写入您的服务器,该文件保存一个序列化的 php 变量数组。只需将所有变量插入关联数组,然后序列化并保存。虽然老实说我不明白为什么不将变量保存到数据库中的变量表中。它不是一个昂贵的操作。

$myvars = array(
  'how_high_do_i_jump' => 10,
  'which_tv_show_is_best' => 'Glee',
  'enable_caching' => true,
  'mathematical_solution' => 4534.234
);

$file_str = serialize($myvars);

//Save the file
file_put_contents('myvars.ser', $myvars);

//To reverse just do this
$file = file_get_contents('myvars.ser');

$myvars = unserialize($file);

如果这对您不起作用,如果您具有 SSH 访问权限,则可以在共享主机上获取 memcache。我实际上是在hostmonster上做到这一点的。这是一个演练(尽管这不是我最初使用的文章)。
http://andrewpeng.net/posts/2011/06/271273-memcached-and-dreamhost-shared-tutorial.html

于 2011-07-15T05:37:34.787 回答
2

您可以使用共享内存扩展。

看看这个基本示例:http ://www.php.net/manual/en/shmop.examples-basic.php

于 2011-07-16T19:17:55.513 回答
0

您可以使用 file_put_contents() 和 file_get_contents() 创建自定义缓存类,从磁盘存储和读取数据。

于 2011-07-15T04:03:42.983 回答