MySQL:查询缓存(如何使用memcache?)

时间:2010-04-02 18:04:27

标签: sql mysql

我有一个类似的查询:

SELECT id as OfferId FROM offers
WHERE concat(partycode, connectioncode) = ? 
AND CURDATE() BETWEEN offer_start_date 
AND offer_end_date AND id IN ("121211, 123341,151512,5145626 ");

现在我想使用memcache缓存此查询的结果,所以我的问题是

  1. 如何使用memcache缓存查询。
  2. 我目前正在使用CURDATE(),如果我们想要实现缓存,那么就无法使用它,那么如何在不使用CURDATE()函数的情况下获取当前日期功能呢?

1 个答案:

答案 0 :(得分:1)

这样的事情应该有效:

function getOffers($ids) {
    $key = implode(',', $ids);

    $cache = new Memcache();
    $cache->connect('localhost');
    $content = $cache->get($key);
    if ($content === false) {
        // content is not cached, so we have to run the query
        $content = $yourDb->query('your query here');
        $cache->add($key, $content);
    }

    $cache->close();

    return $content;
}

getOffers(array('121211','123341','151512','5145626'));

您可以通过对$ids进行排序来更进一步,以便相同的“ID”集(但以不同的顺序)仍将利用该集的可用缓存。

这不是日期敏感的,但您可以通过将日期字符串添加到$key

来使其日期敏感