2012-02-11 50 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的信息。