モバイルフロントエンドの API として Django を使用しています。JSONを送受信するだけです。ホーム フィードのエンドポイントを作成しました。各ユーザーは、フォローしているユーザーに応じて独自のホーム フィードを持っています。ユーザーが写真を投稿すると、その写真はすべてのフォロワーのホーム フィードにプッシュされます。これまでのところ、非常にシンプルで簡単です。
私の同僚の何人かは、ある種のキャッシュ レイヤーを実装する必要があると提案しましたが、問題は、これが静的な通常のサイトだけではないことです。各ビューは、アクセスするユーザーに基づいて動的です。
たとえば、ホーム フィードはプラットフォームに投稿された写真を DESC 時間順 (最近のものから古いものへ) に並べたリストです。
ホーム フィード ビューは非常に基本的なものです。各ユーザーは、写真オブジェクトの主キーを含む Redis の 'homefeed:user_id:%s' リストを持っています。Redis を介して呼び出しを行い、request.user のホームフィード リストを取得してから、そのリストを使用してデータベースにクエリを実行し、次のようにそれらのオブジェクトを探します。
homefeed_pk_list = redis_server.lrange('homefeed:user_id:%s' % request.user.pk, 0, 100)
# Home feed queryset
queryset = Photo.objects.filter(pk__in = homefeed_pk_list)
response_data= []
for photo in queryset:
# Code to return back JSON data
return HttpResponse(json.dumps(response_data), content_type="application/json")
ものすごく単純。今私の質問は、この場合のキャッシュのベストプラクティスは何ですか? シリアル化された各写真オブジェクトを個別にキャッシュし、24 時間の有効期限を設定できます。これは、一部の写真オブジェクトが複数のフィード (ユーザー) にあるためです。オブジェクトがキャッシュに存在しない場合は、DB にアクセスします。このアプローチについてどう思いますか? ?