1

Memcachedに関する多数のガイドを読みましたが、いくつかの点が不明です。

1)私は多くの例を見てきましたが、多かれ少なかれ次のように見えます:

$sql = "SELECT `name` FROM `users` WHERE `id` = 1;";
$memcache->set(md5($sql), $sql, false, 60);
$memcache->get(md5($sql));

ただし、Memcacheに関する知識が限られているため、ここに重大な欠陥があります。同じ方法を使用してINSERT/UPDATEリクエストを含むデータを保存することはできません。技術的には、ハッシュが異なる結果になるためです。

解決策として、次のようなものを使用できると考えました。次のようなクラス/関数を作成します。

class db {
 function insert($sql, $ttl, $key) { // $key would be the name of the key I would manually generate for each query. To maintain uniqueness for each user where needed, could be user_id_keyname
  $memcache->set($key, $sql, false, $ttl);
  mysql_query($sql);
 }


function sel($sql, $ttl, $key) {
  if ($memcache->get($key)) then return $memcache->get($key);
  else {
   $memcache->set($key, $sql, false, $ttl);
   return mysql_query($sql);
  }

これは私の問題への適切なアプローチでしょうか?コードに関するコメントをぜひご覧ください。}}

4

1 に答える 1

3

INSERT/UPDATEクエリの結果をキャッシュする理由は何ですか? SELECT結果セットを一意に識別するために他の情報は必要ないため、クエリの md5 ハッシュを使用しても問題はありません。SELECTデータベースから常にデータを取得する必要がないように、クエリの結果のみをキャッシュする必要があります。データを更新するとき、それを失いたくないので、クエリをデータベースに送信する必要があります。

あなたの例には別の問題があります。実際には、キャッシュにクエリ結果を保存しません。役に立たないSQLクエリのみを保存します。

于 2012-04-22T13:35:20.737 に答える