2

私が興味を持っていること..たとえば、RSS フィードの生成をキャッシュするのに「最も効率的な」ものは何でしょうか? または API 応答 ( への応答など/api/films/info/a12345)。

たとえば、フィード全体をキャッシュし、それを疑似コードとして返してみる必要があります。

id = GET_PARAMS['id']
cached = memcache.get("feed_%s" % id)
if cached is not None:
    return cached
else:
    feed = generate_feed(id)
    memcache.put("feed_%s" % id, feed)
    return feed

または、クエリの結果をキャッシュして、毎回ドキュメントを生成しますか?

id = sanitise(GET_PARMS['id'])
query = query("SELECT title, body FROM posts WHERE id=%%", id)

cached_query_result = memcache.get(query.hash())
if cached_query_result:
    feed = generate_feed(cached_query_result)
    return feed
else:
    query_result = query.execute()
    memcache.put("feed_%s" % id, query_result)
    feed = generate_feed(query_result)

(または、私が見逃している他の方法はありますか?)

4

4 に答える 4

2

私の経験では、複数レベルのキャッシュを使用する必要があります。両方のソリューションを実装します (ただし、それ"SELECT title, body FROM posts WHERE id=%%"が を使用する唯一のコードではない場合。最初のコードのみを使用する場合)。

コードの 2 番目のバージョンでは、 Youmemcache.get(query.hash())memcache.put("feed_%s" % id, query_result). これは、あなたが望むように動作しないかもしれません (通常とは違うバージョンの hash() ;) を持っている場合を除きます)。

私は避けquery.hash()ます。posts-title-body-%id のようなものを使用することをお勧めします。としてキャッシュに保存されているビデオを削除してみてくださいquery.hash()。ゾンビビデオとして何ヶ月もそこにぶら下がることができます.

ところで:

id = GET_PARMS['id']
query = query("SELECT title, body FROM posts WHERE id=%%", id)

GET から何かを取得し、それを SQL クエリに直接入れますか? これは悪いことです (SQL インジェクション攻撃が発生します)。

于 2009-05-05T19:37:18.393 に答える
1

他の人がここで提案しているように、私はあなたのコードをプロファイリングし、操作の最も遅い部分または最も高価な部分を見つけ出します.

于 2009-05-05T23:00:16.407 に答える
1

使用パターンによって異なりますが、すべてが等しい場合、最初の方法に投票します。フィードを生成する作業は 1 回しか行わないためです。

于 2009-05-05T19:20:48.807 に答える
1

アプリが何をするかによって異なります...これに答える唯一の方法は、既存のアプリからいくつかのパフォーマンス数値を取得することです。次に、最も時間がかかるコードを見つけて、そのコードの改善に取り組むことができます。

于 2009-05-05T19:20:59.010 に答える