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

私のコードでは、独自のジェネリック Model クラスを使用し、そのコネクタ (MysqlModel、MongoModel、CassandraModel など) に関連するモデルで拡張し、エンティティ (UserModel、ArticleModel、.. .) Model クラスにキャッシュ処理コードを記述して、モデルのセット全体で再利用します。

基本的なメソッド: readCache、writeCache、deleteCache。リモート キャッシュ (memcached や redis など) をローカル キャッシュ (xcache や apc など) と組み合わせて、正味のオーバーヘッドを削減できます。ただし、デフォルトではなく、特定のフラグが true の場合にのみローカル キャッシュを使用することをお勧めします。

于 2012-09-05T14:49:47.140 に答える