0

だから私はデータをキャッシュする良い方法を考えてきました。画像だけでなく、データが変更されていない場合は、そのデータを再度取得する必要がないためです。私が考えていることは次のとおりです。

Android やその他のモバイル プラットフォーム上のアプリケーションを介して行われたリクエストへの応答として JSON を返す API を php で作成したとします。

特定の会社のアルバムを閲覧できる仕組みを作っています。構造は次のとおりです。

  • 会社
    • アルバム (Company HasMany Album's)
      • 写真 (アルバムにはたくさんの写真があります)

私の API の機能の 1 つは、データベースにあるすべての会社のリストを表示できることです。そのリストは非常に大きくなる可能性があります。このデータをキャッシュする私のアプローチは次のとおりです。

  • API_CACHE_KEY を生成すると、Company が編集または削除されたときに、sharedprefences の API_CACHE_KEY と Web サーバーの API_CACHE_KEY を比較できます。異なる場合は、API で個々の会社を取得することもできるため、変更された会社のみを取得します。この API_CACHE_KEY は、ハッシュされたタイムスタンプに基づいています。

  • API_CACHE_KEY が前回と同じであれば、キャッシュからデータを取得できます。

これは、あらゆる種類のデータをキャッシュするための優れた手法でしょうか? それとも、このようにするのはやり過ぎですか?API_CACHE_KEY をフェッチするにはリクエストが必要であることは承知していますが、毎回リスト全体をフェッチする場合よりもデータが少なくなります。

グッドプラクティスとは何ですか?そして、この種のキャッシングを処理するための他のスマートなテクニックはありますか?

4

2 に答える 2

0

Web サイトの css ファイルのキャッシュを処理する方法など、Web 上の他の場所で既に使用されているキャッシュ メカニズムの 1 つを使用することをお勧めします。2 つのオプション:

  • このデータが最後にいつ変更されたかを示す Last-Modified ヘッダーをデータと共に送信します。これと応答を取得したら保存します。次に、同じデータを再度要求する場合は、タイムスタンプがいつからの場合に If-Modified-Since ヘッダーを送信できます。変更されていない場合、サーバーは 304 not modified を送信し、キャッシュされたデータを使用します。それ以外の場合は、新しいデータ セットと Last-Modified ヘッダーを取得します。

  • 基本的に同じことである ETag を使用します。各データセットに合わせて一意のハッシュを生成し、データが変更されると変更されます。

どちらも標準であり、十分に文書化され、理解されているため、アプリケーションに最適なものを見つけるためにそれらを調査することをお勧めします.

于 2013-06-18T20:21:31.957 に答える
0

最初に、キャッシュによって解決しようとしている特定の問題を決定します。あなたが避けようとしていると私が考えることができる2つの異なることがあります。

  1. サービスへの HTTP 呼び出しを行います。
  2. 呼び出しを行った後、サーバー側 (PHP) で作業を行います。

自己期限切れ

(1) は、データを Android デバイスのローカルにキャッシュし、それ自体で期限切れにすることで回避できます。

高価な会社の API 呼び出しを行い、それをローカルに 6 時間程度保存するだけです。このアプローチを機能させることができれば、その単純さには価値があります。

(2)については、サーバー側でもキャッシングが可能です。同じアプローチを使用できます。関数呼び出しをキャッシュし、一定期間で期限切れになるようにします。

アクティブな有効期限

(1) については、既に述べたように、何が変更されたかを確認するために HTTP 呼び出しを行うことは避けられません。何が変更されたのかを確認するには、少なくとも 1 つの呼び出しを行う必要があります。エンティティをハッシュするというあなたのアイデアはうまくいくでしょう。

たとえば、Android デバイスから会社の API 呼び出しにハッシュのリストを送信すると、ハッシュに基づいて更新されたエンティティのみが返されます。

(2) の場合、キャッシュ内のオブジェクトを積極的に無効化するのは困難な場合があります。データを積極的に無効化/置換する場合は、データのインスタンスを1 つだけキャッシュに保持します。そうしないと、すべてのインスタンスを追跡してデータを更新/置換することが困難になります。

于 2013-06-18T19:27:04.507 に答える