2012-02-11 4 views
1

PythonとDjangoで次のコードを実行する必要があるとします。メモリ変数+ Django

OBJECT_CACHE = {} 

def get_my_objects(key, *args, **kwargs): 
    try: 
     return OBJECT_CACHE[key] 
    except KeyError: 
     OBJECT_CACHE[key] = # code to get object 
     return OBJECT_CACHE[key] 

複数のプロジェクトが同じコードベースを実行している状況で、この動作はどのようになりますか? OBJECT_CACHEはプロジェクトごとに一意であるか、すべてのプロジェクトのオブジェクトと混同されますか?

答えて

6

それは、実行中の各プロセスのためのユニークな「キャッシュ」になります(ご使用の環境や設定に依存していることどのように多くの)

しかし、いずれにせよ、これはこれを行うには、正しい方法ではありません。 Djangoは、あなたのアプローチと本質的に同じですが、実際のキャッシングと全く同じようにスワップすることができるローカルメモリキャッシュのビルドを使ってキャッシングを構築しています。

あなたのsettings.pyにこれを追加します。

CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', 
     'LOCATION': 'unique-snowflake' 
    } 
} 

そして、あなたが行われています。今、あなたは標準のDjangoのインタフェースを使用してキャッシュにアクセスすることができます。

>>> from django.core.cache import cache 
>>> cache.set('my_key', 'hello, world!', 30) 
>>> cache.get('my_key') 
'hello, world!' 

は、情報のためにのためにDjango docsを参照してください。