首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MVC项目中缓存内容

如何在MVC项目中缓存内容
EN

Stack Overflow用户
提问于 2012-11-22 00:36:31
回答 4查看 890关注 0票数 2

我有一个项目,这是一个结果数据库的几个体育赛事系列。正如你可以想象的那样,内容大体上保持不变。我想缓存一些内容以保存数据库查询。

该项目是使用PHP构建的,并且使用了自定义的MVC。您将在何处添加缓存逻辑?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-22 00:41:19

使用Memcached。如下所示,缓存查询的结果,并尝试在DB之前从缓存中检索。

编辑:已添加json_encoding数据...json_encode比PHP的默认数组序列化稍微快一些,并且可以被访问数据的其他应用程序使用

Memcached默认使用FastLZ压缩。

代码语言:javascript
复制
// The ID of the item you're looking for (from $_GET or whatever)
$id = 1;

// Create a memcached instance
$m = new Memcached();
$m->addServer('localhost', 11211);

// Try retrieving the event from memcached
$data = $m->get('event_' . $id);

if ($data) {
    // If you found data in memcached, decode it for use in code
    $data = json_decode($data);
} else {
    // If you didn't find the data in memcached, try retrieving from the DB
    $result = mysqli_query('SELECT * FROM events WHERE id = ' . $id);
    // If you found results in the DB...
    if ($data = mysqli_fetch_assoc($result)) {
        // Save them to memcached for future calls
        // Note: here, I'm using the optional param to expire it after 1 day
        $m->set('event_' . $id, json_encode($data), 86400);
    }
}
// Now you can use your data
var_dump($data);

编辑后可在代码中添加注释

票数 2
EN

Stack Overflow用户

发布于 2012-11-22 00:38:19

我会使用memcached,因为使用它的http://memcached.org/构建缓存解决方案非常容易

我通常将缓存逻辑放在控制器中,尽管模型通常可能更适合它,原因是模型使用的上下文可能会影响缓存策略

将其放入模型中使得缓存策略与其余的数据访问功能处于同一位置,这是正确的,这意味着您可以交换模型,缓存代码也会随之移动。当你有复杂的失效而不能放入模型中时,就会出现这种情况。

“计算机科学中只有两件很难的事情:缓存失效和命名”Phil Karlton

票数 1
EN

Stack Overflow用户

发布于 2012-11-22 00:41:30

可以使用Memcache(d)缓存对象,这对于多服务器设置非常有用。对于单个服务器,您可以将内容存储在APC/Xcache等提供缓存功能的服务器中。

我会在dataaccess方法中缓存数据。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13497825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档