11

REST API 経由で django サーバーと通信する iOS アプリがあります。ほとんどのデータは、単一のフラット ディクショナリにレンダリングされるいくつかの関連モデルを含むかなり大きな Item オブジェクトで構成されており、このデータはめったに変更されません。

これを照会することは Postgres では問題にならないことがわかりましたが、JSON 応答の生成にはかなりの時間がかかります。一方、アイテムのコレクションはユーザーごとに異なります。

Item オブジェクトの辞書を作成し、それを JSON 文字列として redis に保存するだけのレンダリング システムについて考えました。このようにして、redis から直接 API を提供できます (例: HMGET(ユーザー ライブラリ内の項目の ID)。これは高速です。また、「レンダリングされたインスタンス」を比較的簡単に再生成できます。基本的には、ほんの数個のpost_saveシグナルです。

このデザインがどれだけ優れているか気になりますが、大きな欠陥はありますか? たぶん、タスクのためのより良い方法がありますか?

4

1 に答える 1

19

確かに、私たちの会社でも同じことを行っており、Redis を使用して JSON ではなく、RESTful 要求のためにバックエンド データベースから生成された大きな XML 文字列を保存し、多くのネットワーク ホップとオーバーヘッドを節約しています。

Redis を初めて使用する場合は、いくつかの注意事項があります...

専用 Redis サーバー
Redis はシングルスレッドであり、十分な CPU パワーを備えた専用サーバーにデプロイする必要があります。アプリまたはデータベース サーバーにデプロイするのを間違えないでください。

高可用性
高可用性のために、マスター/スレーブ レプリケーションを使用して Redis をセットアップします。Redisクラスターで多くの進歩があったことは知っているので、HA についても確認することをお勧めします。

キャッシュのヒット/ミス
Redis でキャッシュの「ヒット」をチェックするときに、接続が切断されているか、何らかの例外が発生した場合、リクエストは失敗せず、デフォルトでデータベースに設定されます。データベースは常に最後の手段として使用できるため、キャッシュは常に「ベスト エフォート」である必要があります。

于 2013-04-24T19:18:18.607 に答える