В Google App Engine, как проще всего вести учет элементов, которые вы поместили в memcache? - PullRequest
2 голосов
/ 13 марта 2010

Я начинаю использовать memcache чаще, чтобы избежать необходимости пересчитывать вещи между запросами страниц. Когда memcache периодически очищается, как и было задумано, мне приходится начинать все заново, восстанавливая различные элементы, которые я поместил в memcache. Я хотел бы создать очень простую модель, которая позволит мне периодически сохранять элементы, которые я помещаю в memcache, на основе ключей memcache, которые я использую, вместе с датой и временем, связанным с данными, которые кэшируются в memcache. Каков наилучший способ сделать это?

Я ищу что-то вроде этого:

class MemcacheRecord(db.Model):
  key = db.StringProperty(required=True)
  value = #Something that can store whatever memcache can
  validThru = db.DateTimeProperty(required=True)

  def set(self, key, value, validThru):
      #Save a new memcache record
      newMemcacheRecord = MemcacheRecord(key=key, value=value, validThru=validThru)
      ..
      return True # or False

  def get_latest(self, key):
      #Get the memcache record with the most recent validThru datetime
      latestMemcacheRecord = MemcacheRecord.all().order('-validThru').get()
      return {'validThru':latestMemcacheRecord.validThru, 'value':latestMemcachRecord.value}

Ответы [ 2 ]

4 голосов
/ 13 марта 2010

Вероятно, нет особой пользы в попытке отследить, что вы сохранили в memcache, потому что даже если у вас был список, нет никакой гарантии, что данные действительно были сохранены.

Я думаю, что единственный способ работать с memcache - это попытаться извлечь из него данные, ожидая, что их там не будет, даже если вы вставили их раньше. Вы должны построить свои алгоритмы вокруг этого.

1 голос
/ 03 ноября 2011
import pickle

memcacherecord.value = pickle.dumps(mydict)
memcacherecord.put()

mydict = pickle.loads(memcacherecord.value)

То, что вы описываете, вы пытаетесь сделать, звучит как анти-паттерн.

Несмотря на то, что вы можете указать дату окончания срока действия, будет ли ваш ключ сохранен в memcache, непредсказуемо.Попытка сохранить эту информацию в хранилище данных будет медленной, а иногда и неправильной.

Как сказал @Thilo, просто попытайтесь получить доступ к memcache, не пытаясь узнать, существует ли она уже там.Если это не удается, извлеките из хранилища данных и поместите его в memcache для следующего запросчика.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...