Python Memcached:缓存对象

1 投票
1 回答
5713 浏览
提问于 2025-04-17 10:00

我正在使用 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)时,数据库都会被访问一次。不过,你可以手动缓存这些关系,减少数据库的访问次数。

撰写回答