1

いつでも「生きている」キーの数を取得したい。APIドキュメントによると、 getItemCount() はこれを返すことを意図しています。

しかし、そうではありません。期限切れのキーは、getItemCount() の値を減らしません。どうしてこれなの?有効期限が切れていないすべての「アクティブ」または「アライブ」キーの数を正確に取得するにはどうすればよいですか?

これが私のプットコードです。syncCache.put(uid, cachedUID, Expiration.byDeltaSeconds(3), SetPolicy.SET_ALWAYS);

これで、3 秒後にキーが期限切れになります。それらは期限切れになりますが、 getItemCount() はキーの実際の数を反映していません。

更新: memcache は私が使用すべきものではない可能性があるため、ここで私がやろうとしていることは次のとおりです。

デスクトップ アプリケーションの「オンライン ユーザー」機能として機能する google-app エンジン サーバー/アプリを作成したいと考えています。デスクトップ アプリケーションは、パラメーターとして一意の ID を使用してアプリに http 要求を行います。アプリは、この UID をタイムスタンプと共に保存します。これは 3 分ごとに行われます。

5 分ごとに、タイムスタンプがその 5 分間の枠外にあるエントリはすべて削除されます。次に、エントリの数を数えます。それが「オンライン」のユーザー数です。

タイムスタンプや期限切れのエントリのクリアについて心配する必要さえないため、期限切れ機能は完璧に思えました。

4

2 に答える 2

0

getItemCount()は、memcacheが機能する方法であり、他の多くのキャッシュも同様であるため、期限切れのキーを返す可能性があります。

Memcacheは、説明したことを実行するのに役立ちますが、実行しようとした方法では実行できません。まったく逆の状況を考えてみましょう。オンラインユーザーをmemcacheに入れてから、空きメモリが不足しているため、appengineがそれらをmemcacheから消去します。キャッシュは、アイテムが特定の期間保存されることを保証するものではありません。そのため、memcacheを使用すると、データストアへのリクエスト数とレイテンシを減らすことができます。

それを行う方法の1つ:データストア(または、非常に正確である必要がない場合はmemcache)に保存されたソート済みマップ(ユーザーID、最終ログイン更新)エントリを維持します。ログイン/更新のたびに、特定のキーで値を更新し、定期的なcronジョブから古いユーザーをマップから削除します。したがって、マップのサイズは、特定の時点で使用されているログイン数になります。

マップがmemcacheまたはデータストアの両方の制限である1Mbに収まるようにしてください。

于 2012-07-07T16:56:13.350 に答える
0

ドキュメントに問題がある可能性があります.pythonのものは、生きているものについて何も言及していません。これはpythonでも再現可能です。

この関連記事も参照してくださいmemcached の遅延有効期限メカニズムはどのように機能しますか? .

于 2012-07-02T22:02:09.603 に答える