Python Memcached:缓存对象
我正在使用 Python 2.6.5 和 Django 1.3
假设我有一个这样的模型:
class Company(models.Model):
name = models.CharField(...)
type = models.SmallIntegerField(...)
....
def check_condition(self, someParam):
do someThing...
return someThing
这个模型使用得非常频繁,所以我把基本数据放在一个字典里,并把这个字典缓存起来。
aComp = Company.objects.get(pk=somevalue)
compDict = {'name':aComp.name, 'type': aComp.type...}
cache.set('companyInfo', compDict)
一切都很好,但在某些情况下,我需要调用 Company
的方法,但因为我缓存了 公司信息,我在想缓存对象是否合适……就像这样:
compDict = {'name':aComp.name, 'type': aComp.type, 'obj':aComp}
然后使用它
myComp = cache.get('companyInfo')
compInst = myComp['obj']
compInst.check_condition(aParam)
我想知道缓存一个对象的效果如何,以及像这样使用缓存对象来调用实例方法是否有效?
1 个回答
2
这没什么问题。当然,把对象转成可以存储的格式(也就是“序列化”)会有一些额外的开销,但你不会感觉到。
还有一点要记住,当你访问外键(ForeignKey)、多对多关系(ManyToManyField)和一对一关系(OneToOneField)时,数据库都会被访问一次。不过,你可以手动缓存这些关系,减少数据库的访问次数。