【问题标题】:Python Memcached: caching objectsPython Memcached:缓存对象
【发布时间】:2012-01-11 11:10:04
【问题描述】:

我正在使用 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 的方法,但由于我缓存了 company info ,我想知道缓存对象是否好......就像

compDict = {'name':aComp.name, 'type': aComp.type, 'obj':aComp}

并使用它

myComp = cache.get('companyInfo')
compInst = myComp['obj']
compInst.check_condition(aParam)

我想知道缓存一个对象并使用缓存的对象进行这样的实例方法调用有多有效?

【问题讨论】:

  • 如果你正在缓存整个对象,那么字典根本没有意义:只需将aComp 传递给cache.set
  • @DanielRoseman - aComp 'd Django qs 对象(尚未命中数据库,即尚未评估查询集)。我尝试设置 obj,使用 cache.get('obj') 导致相同数量的查询 - 因为它得到了评估模板,即 obj.attr
  • 我正在寻找一种方法来缓存昂贵的查询 - 以最小的开发开销(庞大的代码库)。

标签: python django caching memcached python-memcached


【解决方案1】:

没有问题。当然酸洗对象会有一些开销,而不是原始数据,但你不会注意到它。

请记住,当您访问 ForeignKey、ManyToManyField 和 OneToOneField 时,无论如何您都会命中 DB。但是你可以手动缓存这些关系。

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 2012-10-14
    • 2012-11-27
    • 2010-11-22
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多