Redis を使用してデータをキャッシュするプロセスにおけるキャッシュ設計のアイデアは次のとおりです:
データを取得するときは、まずキャッシュからデータを取得します。取得したデータが空の場合は、データベースにクエリを実行し、クエリされたデータをキャッシュします。まず redis に送信してからデータを返します
しかし、ここで 2 つの質問があります:
データベース内のクエリの結果が空の場合、データはキャッシュされないため、データを取得するたびにデータベースクエリが実行されます。最適化されましたか?
データが更新されたとき、キャッシュはどのように処理されるべきですか?
これら 2 つの問題について、私には未熟な考えがありますが、それが実現可能かどうか、また、より良い対処方法があるかどうかについて、皆さんにアドバイスをお願いします。
最初の質問では、データベース クエリからデータが取得されない場合、次回キャッシュからデータを取得するときに、固定のデフォルト値 (文字列 'nodata' など) をキャッシュします。データが存在しないことを示すためにこの固定値を取得します。データの値が返されると、データベースに再度クエリを実行せずに直接 null が返されます。2 番目の質問については、現在の考えでは、更新されたデータが特に重要でない場合は、データをデータベースに書き込み、次回データを取得するときに、キャッシュ内の対応するデータを直接更新することができます。ただし、更新されたデータが特に重要である場合 (金銭など)、次回データを取得するときに、対応するキャッシュが直接クリアされます。データベースにクエリを実行して最新のデータを取得します。
返信内容:
データを取得するときは、まずキャッシュからデータを取得します。取得したデータが空の場合は、データベースにクエリを実行し、クエリされたデータをキャッシュします。まず redis に送信してからデータを返します
しかし、ここで 2 つの質問があります:
2 番目の質問については、現在の考えでは、更新されたデータが特に重要でない場合は、データをデータベースに書き込み、次回データを取得するときに、キャッシュ内の対応するデータを直接更新することができます。ただし、更新されたデータが特に重要である場合 (金銭など)、次回データを取得するときに、対応するキャッシュが直接クリアされます。データベースにクエリを実行して最新のデータを取得します。
これら 2 つの状況を区別する方法 (自然に null 許容型や sum 型など) が必要です。たとえば、データがある場合は、JSON リスト
に格納されます。とにかく、衝突がない限り。
[{...}, {...}]
,那么没数据时自然存 []
キャッシュ更新ルーチン - CoolShell.cn
上で言ったことは理にかなっています。
キャッシュはクエリを実行し、mysql アクセスの数を減らすためだけのものです。キャッシュ更新の問題に関しては、コードで実装する必要があります。