延迟加载缓存机制

时间:2012-09-05 14:21:31

标签: mysql zend-framework redis

我正在尝试为我的项目构建“智能”缓存机制。关于项目的简短:它是社交网络,主要是阅读密集型,还有针对某些实时内容的nodejs的websocket连接 - 例如聊天。

这是构建这样的缓存机制的好方法吗? 使用这种方法我们得到了什么利弊?

function loadUser($id) {
   $user_key = 'user_'.$id;

   if( $user = Zend_Registry::get($user_key)) ) {
      return $user;
   }
   elseif( $user = loadFromRedis($user_key) ) {
      Zend_Registry::set($user_key, $user);
   }
   else {
      $user = loadFromMysql($user_key)
      setToRedis($user_key, $user);
      setKeyExpire(30);
      Zend_Registry::set($user_key, $user);
   }

   return $user; 
}

1 个答案:

答案 0 :(得分:0)

我认为这不是最好的方法,因为Zend增加了很多开销(如果你是缓存,那是因为你想要提升你的应用程序)。

在这个站点中有许多基准来解释Zend开销(以及与其他框架的比较):http://www.ruilog.com/blog/view/b6f0e42cf705.html

在我的代码中,我倾向于使用我自己的通用Model类,使用与其连接器相关的模型(MysqlModel,MongoModel,CassandraModel ...)扩展它,并使用与实体直接相关的类扩展这些类(UserModel,ArticleModel ,...)并在Model类中编写缓存处理代码,以在整个模型集中重用它。

基本方法:readCache,writeCache,deleteCache。您可以将远程缓存(如memcached或redis)与本地缓存(如xcache或apc)结合使用,以减少净开销。但我建议只有在某个标志为真时才使用本地缓存,而不是默认情况下。

相关问题