【问题标题】:MySQL: Query Cacheing (How do I use memcache?)MySQL:查询缓存(如何使用 memcache?)
【发布时间】:2010-04-02 18:04:26
【问题描述】:

我有一个类似的查询:

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() 函数的情况下获得当前日期功能?

【问题讨论】:

  • 这个问题清楚还是需要更多修改?
  • 这个问题基本上是:How do I use memcache?
  • 我对这里的许多 memcache 问题持高度怀疑态度......人们似乎认为 memcache 是任何 [web] 应用程序的必要补充,但对什么样的数据可以有用却没有任何感觉放入其中。 memcache 不是让查询更快的神奇修复;在数据库本身具有合适的索引和缓存,没有它这样的简单查询应该没问题。 memcache 增加了复杂性和潜在的一致性问题:在真正需要之前不要将其添加到项目中。

标签: sql mysql


【解决方案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 来使其日期敏感

【讨论】:

    猜你喜欢
    • 2014-07-10
    • 2011-06-23
    • 2013-04-09
    • 2021-08-16
    • 2012-04-28
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    相关资源
    最近更新 更多