0

我正在尝试为我的项目构建“智能”缓存机制。项目简介:它是社交网络,主要是阅读密集型,此外还有与 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; 
}
4

1 回答 1

0

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

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

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

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

于 2012-09-05T14:49:47.140 回答