2013-01-09 10 views
5

たとえば、このような場合、key_prefixを使用する必要がありますか? documentフラスコキャッシュの `key_prefix`は何をしますか?

@cache.cached(timeout=50, key_prefix='all_comments') 
def get_all_comments(): 
    comments = do_serious_dbio() 
    return [x.author for x in comments] 

cached_comments = get_all_comments() 

、それはkey_prefixのデフォルト値はrequest.path cache_key.:だという、cache_keyは、私はそれをどのように使用できるか、何を意味するのでしょうか? key_prefixは何をしますか?

答えて

12

最初にrequest.pathは、script_rootの後に(paramsを除く)すべてです。たとえば、次のURLについて

  1. 等、http://127.0.0.1:5000/users/login/、要求データがある:

    request.path is: /users/login/ 
    
  2. 上記リンク、http://www.example.com/myapplication/page.html?x=yから例のようなURLは、要求データがある:

    request.path is: /page.html 
    

Q. cache_keyとはどういう意味ですか、どうすれば使用できますか?

cache_keyは、特定のキャッシュされた値にアクセスするために使用されるキーです。あなたが知っているように、キャッシュはキーバリューストアです。

フラスコキャッシュではcache_keyが拡張によって生成されており、私たちはそれを自分で使用することは想定していません。


行うkey_prefix何Q.?

key_prefixは、キャッシュされた値のcache_keyを生成するために使用されます。どのように正確に行われるかは、make_cache_key sourceを参照してください。


Q.それはkey_prefixを使用する必要ですか?

のは、あなたが2つの異なるビュー機能からget_all_commentsを呼び出し、manage()を言うと、view()されているとしましょう。また、key_prefixを指定しないで、get_all_comments@cachedにキャッシングします。

get_all_comments出力がでキャッシュされているあなたはviewてポストにを閲覧初めてdefault keyのような:%srequest.pathあるview/%sの値が何であれview/viewまたはview/module/view、または、。リクエストのでcache_keyは、キャッシュからデータをview/manageに変更し、古いview/viewではありませんしている得るために適用されるので、あなたがmanageを通じてポストを管理

次に、get_all_comments出力は、キャッシュから読み込まれていません。パスが変更されました。

get_all_commentsここでは、可能な限りキャッシュからデータを取得するのではなく、ビューの機能の間でキーが変更されているため、実際には両方の時間がデータベースから取得されます。あなたはall_commentsのようなkey_prefixを指定した場合には

はしかし、その後、最初の時間のデータがDBから取得され、そしてcache_keyはまだall_commentsと値である次回は発見され、そのデータが代わりにDBのキャッシュからアクセスされます。

key_prefixを使用すると明らかに上記のような場合があります。それ以外の場合は、関数が常に単一のパス/ビュー関数から呼び出され、デフォルトのものを使用するようにしても問題ありません。


注:

cache_key = decorated_function.make_cache_key(*args, **kwargs) 
+2

ニースの答え:cache_keyが生成される/すべてのリクエストに対して計算は、sourceを参照してください!ちょうど追加したければ、そのprefix_keyは戻り値がcache_keyとして使用される呼び出し可能なものでもかまいません。だから私はあなた自身のmake_cache_key関数を渡すために "乱用"することができると思います。ここの私の例を見てくださいhttp://stackoverflow.com/questions/9413566/flask-cache-memoize-url-query-string-parameters-as-well/14264116#14264116 – Smoe

+0

@Smoeあなたは絶対に正しいです、['callable (key_prefix): cache_key = key_prefix() '](https://github.com/thadeusb/flask-cache/blob/master/flask_cache/__init__.py#L218) –