GAE Python: использование фильтра и курсора с кэшем памяти

Скажем, у вас есть список сообщений с 5 категориями. Когда вы делаете memcache, как вы должны фильтровать категории?

class Post(db.Model):
    title = db.StringProperty(required=True)
    category = db.StringProperty()
    desc = db.StringProperty()

При кэшировании:

key = "allpost"
post = Post.all().order('-created')
memcache.set(key, post)

Я попробовал использовать фильтр для кэшированного объекта. И очевидно, что это не сработает.

cached_post.filter("категория","один")

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


person tipsywacky    schedule 28.01.2013    source источник


Ответы (1)


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

Взгляните на NDB, большая часть кэширования памяти выполняется за вас (но не для запросов).

Таким образом, вы можете фильтровать данные, полученные из кэша памяти, но нет команд для фильтрации в кэше памяти.

Ознакомьтесь с доступными функциями: https://developers.google.com/appengine/docs/python/memcache/functions

person Paul Collingwood    schedule 28.01.2013
comment
Большое спасибо. Я забыл, что могу просто использовать python для фильтрации элементов. Однако изначально я использовал курсор для разбиения на страницы. Просто используйте python. Как вы думаете, лучше не использовать курсор для разбиения на страницы? - person tipsywacky; 28.01.2013
comment
Боюсь, это зависит. Курсоры — это здорово, но не забывайте, что курсоры могут устареть по мере их использования, так что это действительно зависит от вашего конкретного случая использования. - person Paul Collingwood; 28.01.2013