2009-07-20 5 views
2

У меня есть список объектов, которые я хочу сохранить в memcache. Проблема заключается в том, что у меня есть большие модели, на которые ссылается их ReferenceProperty, которые также автоматически сохраняются в memcache. В результате я превысил ограничение на размер для объектов, хранящихся в memcache .объекты memcache без ReferenceProperty

Есть ли возможность предотвратить ссылки ReferenceProperties от загрузки ссылочных моделей при помещении их в memcache?

Я пытался что-то вроде

def __getstate__(self): 
    odict = self.__dict__.copy() 
    odict['model'] = None 
    return odict 

в классе я хочу хранить в кэше, но это, кажется, не делать трюк.

Любые предложения будут высоко оценены.

Редактировать: Я проверял, добавив оператор регистрации, что выполняется __getstate__ -Method.

+0

+1. Вы уверены, что выполнено __getstate__? –

+0

Я предпочитаю хранить ключи в свойствах, отличных от ReferenceProperties, чтобы избежать этого и других проблем, связанных с ленивой загрузкой, но я предполагаю, что это не тот ответ, который вы ищете – gravitation

ответ

0
odict = self.copy() 
del odict.model 

, вероятно, будет лучше, чем при использовании Dict (если GetState не нужно возвращать Dict - я с ним не знаком). Не уверен, что это решает вашу проблему, хотя ... Вы можете реализовать del в модели, чтобы проверить, освобожден ли он. Для меня это похоже, что вы все еще держите ссылку.

Также проверьте модуль рассола - вам нужно будет хранить все под одним ключом, но он автоматически защитит вас от нескольких ссылок на один и тот же объект (сохраняет его только один раз). Извините, нет ссылки, мобильный клиент;)

Удачи!

1

Для больших объектов вы можете вручную обрабатывать загрузку связанных объектов, сохраняя ключи больших объектов как нечто отличное от ReferenceProperty. Таким образом, вы можете выбрать, когда загружать большую сущность, а когда нет. Просто используйте длинные идентификаторы хранилища свойств или свойство string для хранения имен ключей.

Смежные вопросы