ホームページ  >  記事  >  バックエンド開発  >  Redis キャッシュ戦略

Redis キャッシュ戦略

WBOY
WBOYオリジナル
2016-09-06 08:57:081192ブラウズ

Redis を使用してデータをキャッシュするプロセスにおけるキャッシュ設計のアイデアは次のとおりです:
データを取得するときは、まずキャッシュからデータを取得します。取得したデータが空の場合は、データベースにクエリを実行し、クエリされたデータをキャッシュします。まず redis に送信してからデータを返します
しかし、ここで 2 つの質問があります:

  1. データベース内のクエリの結果が空の場合、データはキャッシュされないため、データを取得するたびにデータベースクエリが実行されます。最適化されましたか?

  2. データが更新されたとき、キャッシュはどのように処理されるべきですか?

これら 2 つの問題について、私には未熟な考えがありますが、それが実現可能かどうか、また、より良い対処方法があるかどうかについて、皆さんにアドバイスをお願いします。

最初の質問では、データベース クエリからデータが取得されない場合、次回キャッシュからデータを取得するときに、固定のデフォルト値 (文字列 'nodata' など) をキャッシュします。データが存在しないことを示すためにこの固定値を取得します。データの値が返されると、データベースに再度クエリを実行せずに直接 null が返されます。

2 番目の質問については、現在の考えでは、更新されたデータが特に重要でない場合は、データをデータベースに書き込み、次回データを取得するときに、キャッシュ内の対応するデータを直接更新することができます。ただし、更新されたデータが特に重要である場合 (金銭など)、次回データを取得するときに、対応するキャッシュが直接クリアされます。データベースにクエリを実行して最新のデータを取得します。

返信内容:

Redis を使用してデータをキャッシュするプロセスにおけるキャッシュ設計のアイデアは次のとおりです:

データを取得するときは、まずキャッシュからデータを取得します。取得したデータが空の場合は、データベースにクエリを実行し、クエリされたデータをキャッシュします。まず redis に送信してからデータを返します
しかし、ここで 2 つの質問があります:

    データベース内のクエリの結果が空の場合、データはキャッシュされないため、データを取得するたびにデータベースクエリが実行されます。最適化されましたか?
  1. データが更新されたとき、キャッシュはどのように処理されるべきですか?
  2. これら 2 つの問題について、私には未熟な考えがありますが、それが実現可能かどうか、また、より良い対処方法があるかどうかについて、皆さんにアドバイスをお願いします。
最初の質問では、データベース クエリからデータが取得されない場合、次回キャッシュからデータを取得するときに、固定のデフォルト値 (文字列 'nodata' など) をキャッシュします。データが存在しないことを示すためにこの固定値を取得します。データの値が返されると、データベースに再度クエリを実行せずに直接 null が返されます。

2 番目の質問については、現在の考えでは、更新されたデータが特に重要でない場合は、データをデータベースに書き込み、次回データを取得するときに、キャッシュ内の対応するデータを直接更新することができます。ただし、更新されたデータが特に重要である場合 (金銭など)、次回データを取得するときに、対応するキャッシュが直接クリアされます。データベースにクエリを実行して最新のデータを取得します。

これら 2 つの状況を区別する方法 (自然に null 許容型や sum 型など) が必要です。たとえば、データがある場合は、JSON リスト

に格納されます。とにかく、衝突がない限り。

  1. [{...}, {...}],那么没数据时自然存 []キャッシュ更新ルーチン - CoolShell.cn

  2. 上で言ったことは理にかなっています。
  3. ファイル キャッシュの考え方を参照できます。
Thinkphp ファイル キャッシュではデータの保存にシリアライズ (valle) が使用され、ファイル名がキー名として使用されます。キャッシュをクリアするには、直接set(null)を行うことで実現します。

キャッシュはクエリを実行し、mysql アクセスの数を減らすためだけのものです。キャッシュ更新の問題に関しては、コードで実装する必要があります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
前の記事:thinkphpの問題次の記事:thinkphpの問題