我正在使用 GAE 和 memcache。对于我的书单,我创建了一个键并将其存储在内存缓存中,以避免每次我必须查看列表时都命中数据库。
当我向数据库添加一个新项目时,我也将它添加到 memcache 键中,但是列表的开头,如下所示(在这种情况下,self 是 book 实体):
class Book(ndb.Model):
""" A Book """
title = ndb.StringProperty(required=True)
author = ndb.StringProperty(required=True)
# Add a new element to memcache
def add_to_memcache(self):
data = memcache.get('mybooks')
if data:
logging.info('Adding to Memcache for key %s.', 'mybooks')
data.insert(0, self)
if not memcache.set('mybooks', data):
logging.error('Memcache set failed for key %s.', 'mybooks')
@classmethod
def get_all(cls):
key = 'mybooks'
books = memcache.get(key)
if books is None:
books = list(Book.query().order(Book.title).fetch(100))
if not memcache.set(key, books):
logging.error('Memcache set failed for key %s.', key)
else:
logging.info('Memcache hit for key %s.', key)
return books
@classmethod
def save(cls, **kwargs):
book = cls(title=kwargs['title'],
author=kwargs['author']
)
book.put()
# Modify memcache for this key
book.add_to_memcache()
return book
因此,在第一次阅读 memcache 时,所有内容都是有序的,但是对于一本新书,列表不再是有序的。
我试着做:
data.insert(0, self)
data = sorted(data, key=itemgetter(1))
但我收到错误TypeError: 'Book' object does not support indexing
对索引有什么建议吗?