在Django中,如何有效地加载和存储全局常量数据以进行缓存?
你通常是怎么从数据库加载和存储数据到全局常量里的,以便在初始化时进行缓存的?这些全局常量在之后不会再改变。
你是直接在加载时查询数据库,然后把结果放到常量里,还是用某种懒加载的方式?
我想的代码大概是这样的:
SPECIAL_USER_GROUP = Group.objects.get(name='very special users')
OTHER_THING_THAT_DOESNT_CHANGE = SomeDbEnum.objects.filter(is_enabled=True)
# several more items like this
我在使用一个空的测试数据库进行测试时遇到了一些问题。如果把所有需要的数据放在固定数据里也是一种选择,但我想避免让每个测试都和不相关的数据耦合在一起。
那么下面的做法算不算好的风格呢?
@memoize
def get_special_user_group():
return Group.objects.get(name='very special users')
还是说更倾向于使用一种通用的可重用机制呢?
2 个回答
0
一个选择是把所有需要的数据放在固定的文件里,
这个想法不错。
但我想避免让每个测试都和它们不需要的无关数据绑定在一起。
那就定义一些更小的固定数据。
如果需要,可以使用测试案例中的 setUp
方法来创建所需的数据库记录。
3
Django有一个缓存框架,你可以用它来加速你的应用。
http://docs.djangoproject.com/en/dev/topics/cache/
这个框架提供了一个低级别的缓存接口,可以满足你的需求。
from django.core.cache import cache
cache.set('my_key', 'hello, world!', 30)
cache.get('my_key')
使用它的话,你可以这样做:
if cache.get("key"):
return cache.get("key")
else:
value = some_expensive_operation()
cache.set("key",value)
return value
用这样的方式将来会给你更多的灵活性。