跨PHP请求本机持久化数据

时间:2011-06-25 17:17:54

标签: php caching

我想在PHP请求之间缓存一些数据,而不是在每次调用期间从数据库中提取数据。无论用户/会话如何,数据都适用。实现这一目标的最轻的方法是什么?我不能保证对驱动器的写访问权或要求APC。有没有办法用香草PHP实现这一点?谢谢!

5 个答案:

答案 0 :(得分:11)

当你提出这个问题时,我想到了3种“方式”,但在我总结之前,让我说PHP不是为了做你想做的。查询(或累积)数据没有“通用”缓存系统。但是,您可以做几件事来加速页面加载和数据请求:

  1. 会话要求:用户的Cookie支持和每个新用户的重新查询)
  2. 缓存文件要求:对驱动器的写入权限)
  3. 缓存查询要求:能够在MySQL中缓存查询)
  4. 第一个会话相当明显,但只有在数据依赖于用户时才会使用它(如果不是试图避免它)。对于缓存文件将需要写访问权限,但这是网站范围数据的最佳方法。只需使用序列化数组(普通文件)或XML数据,任何适合您的需求。最后一个是加速MySQL请求的好方法(如果它们每次都是相同的,并且您没有对系统的任何写访问权限)。您可以使用cached select

    在数据库中缓存查询

    正如您所看到的,所有这些方法各有优缺点,但您可以随意使用它们。但需要注意的是,从文件或会话加载缓存数据需要时间,因此您应该检查缓存是否实际加快了请求!

答案 1 :(得分:2)

有许多“缓存”方式,数据库可以是其中之一。您可以尝试的另一个选项是XML文件,但这一切都取决于您的具体问题。

答案 2 :(得分:1)

P.S:

如果您希望自己的网站运行良好,请务必尝试安装APC。 APC主要是/ opcode-cache,它可以极大地加速您的网站,但是我仍然会尝试为您提供一些快速的替代方案。

redistogo.com

  

Redis是一个开源的,先进的   键值存储。它经常被提及   从那以后作为数据结构服务器   键可以包含字符串,哈希,   列表,集合和排序集。

redistogo.com提供5MB内存的免费redis服务器(FAST)。您接下来可以使用普通的vanilla redis-client(例如predis)连接到redis-server并缓存您的数据。

的/ dev / SHM

  

有没有办法实现这个目标   香草PHP?谢谢!

您可以尝试使用Cache_Lite(Vanilla库)并尝试写入/dev/shm(共享内存),但是您需要Linux操作系统。 introduction页面显示了基本内容。如果可能,您应该使用cache_dir => '/dev/shm'

// Set a few options
$options = array(
    'cacheDir' => '/dev/shm',
    'lifeTime' => 3600
);

您可以随时/也使用此软件包写入光盘(与内存相比较慢),但也可以缓存并加快您的网站速度。

答案 3 :(得分:0)

我不认为这是可能的。您仍然可以将数据预加载到PHP会话中一次,这肯定会减少数据库查询的数量。

答案 4 :(得分:0)

要拥有典型的系统/应用程序缓存,您需要文件系统写入权限或具有类似APC的功能。

缓存数据的唯一方法是将其设置为每个用户的会话,如果会话密钥“my-cache”不存在,则从数据库获取并设置为会话。就像使用任何其他缓存方法一样,您还必须考虑在数据更新时取消设置缓存等。

在客户端缓存应用程序数据根本不理想,但如果你需要缓存,缓存选项不可用,那么这是你唯一的选择。