如何在不命中数据库的情况下重新排序内存缓存

时间:2012-07-05 16:53:55

标签: python google-app-engine memcached google-cloud-datastore

我正在使用jinja2作为模板系统在python中的google app引擎上编写一个Web应用程序,该应用程序基本上允许用户撰写帖子/评论并对其他用户的帖子进行排名。排名系统基于上/下票数和评论数。我正在尝试使用memcache存储此计算值并相应地对帖子进行排名。

我只想偶尔将值存储在数据库中,以免使写入成本变得昂贵。我计划有一个计数器,每10票/评论将其存储在数据库中。我在想这样的事情:

# I update the counter every time that I add a vote or comment
counter = 0
def posts_cache(update = False):
        global counter
        key = 'main'
        posts = memcache.get(key)
        if posts is None or update:
                logging.error("DB QUERY")
                posts = db.GqlQuery("SELECT * "
                                        "FROM Post "
                                        "ORDER BY rank DESC "
                                        "LIMIT 100",
                                         key)
                posts = list(posts)
                memcache.set(key, posts)
        if counter>=10:
                counter = 0
                #put the memcache posts in the database
        return posts

但我不知道如何在memcache中发布我的帖子并将它们存储在数据库中。有没有办法在python中这样做?我查看了文档,但没有找到明确的方法。

1 个答案:

答案 0 :(得分:1)

  1. 不能这样做是因为memcache不是可靠的,因为它可以驱逐你的实体,而不会丢失数据。
  2. 批量存储实体不会降低您的成本,而是按实体付费。
  3. 为了降低您的写作成本,请尝试在不需要索引的属性上设置indexed = false。