PHP变量缓存


PHP variable caching

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

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

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

谢谢

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

在网站上有很多方法在很多层次上实现缓存。让我们看看他们从前端开始移动到后端,没有太多的细节。

HTTP缓存

参见如何使用HTTP缓存优化您的站点

应用级缓存

这是对"查询成本高"的数据库对象的缓存。例如:memcache,在文件中缓存页面等

操作码缓存

例如:PHP加速器,eAccelerator等

数据库级缓存

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

在您的情况下,我建议调整my.cnf,因为给定足够的RAM, MySQL相当快。只是尽量不要预优化。

您可以使用共享内存扩展

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

您可以直接向服务器写入一个文件,该文件保存了一个序列化的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

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