记住PHP / MySQL函数

时间:2012-07-13 15:28:44

标签: php mysql sql

由于MySQL查询,我的函数很慢 只要某些MySQL表保持不变,该函数将返回相同的结果 在PHP / MySQL中“记忆”这样一个函数的最简单方法是什么?

修改
我希望看到的是:

  • 类似于MqSQL表的表哈希/上次修改日期。
  • PHP方面的一些东西足够聪明,可以找出函数可以访问哪些表,如果适当的话,可以缓存/检索结果。

5 个答案:

答案 0 :(得分:1)

为什么不缓存查询的结果并清除缓存,如果这些特定的表发生了变化?

答案 1 :(得分:1)

您很可能正在寻找数据的缓存方法。

以下是一些可能感兴趣的方法:

<强>分布式缓存/ APC

如果您有权访问支持此功能的主机,请选择它。这是今天存储和检索数据的单一,最快的方式。

参考http://www.php.net/manual/en/book.memcached.php


文件缓存

您可以使用PHP中的文件库将数据保存到文件中,并在需要时检索它。这对于Javascript数据可能很有用,您也可以按需动态加载.js文件。

参考http://www.php.net/manual/en/ref.filesystem.php


SQL缓存

您还可以将结果存储在单独的表中(假设您使用的是昂贵的复杂操作,而不是将其从单个表中拉出),以便于读/写访问。

参考http://www.php.net/manual/en/ref.pdo-mysql.php


查看cronjobs以便随时删除缓存数据可能符合您的利益(为了节省空间或更新缓存)。

参考http://en.wikipedia.org/wiki/Cron

享受并祝你好运!

答案 2 :(得分:1)

首先,您可以将结果存储在semlf制作的“缓存”中。同时第一次处理结果。然后,当再次触发相同的查询时,您只需从缓存中读取结果。但这只有在您知道表格中没有任何变化时才有效。你呢 ?

除此之外:mysql RDMBS非常擅长缓存。因此,通常第二次触发相同的查询将获得更快的回复。还不够吗?

答案 3 :(得分:1)

在我这边,我使用我构建的自定义MVC框架,每次我调用基于SELECT的函数时,如果我已经处理了该结果并且只是返回它,我将在缓存中查看:

public static function getProductsByCategory(Activis_Catalog_Models_Category $category, array $except = array(), $limitedToActivation = true){

    //If the cache contains the request, return it
    if(isset(self::$__resultCache['getProductsByCategory'][md5(serialize(func_get_args()))])){ return self::$__resultCache['getProductsByCategory'][md5(serialize(func_get_args()))]; }

     ...... PROCESS THE FUNCTION NORMALLY ....

    self::$__resultCache['getProductsByCategory'][md5(serialize(func_get_args()))] = $objects;
    return $objects;

这将是一个简单的缓存机制,允许您缓存数据(在本例中为对象),如果稍后再次进行相同的函数调用,则返回它们。

如果你的模型中有UPDATE / DELETE / INSERT功能,你应该记得清除“$ cache”,否则你将返回错误的数据。

答案 4 :(得分:0)

看看Cachalot。代码看起来像这样:

$cache = new \Cachalot\ApcCache();
$products = $cache->getCached([$productRepository, 'findByCategory'], ['cars']);

支持不同的后端:Apc,Xcache,Memcached,Redis,Couchbase。