【问题标题】:Memcached doesn't update on timeMemcached 没有按时更新
【发布时间】:2014-03-29 20:40:00
【问题描述】:
class MainHandler(BaseHandler.Handler):
    def get(self):
       user = users.get_current_user() or "unknown"
       posts = memcache.get('posts_%s' % user.user_id())
       if not posts:
         q = db.Query(P.Post)
         q.filter('author =', users.get_current_user()).order("-date")
         posts=q.fetch(5)
         memcache.set(key='posts_%s:'%user.user_id(),value=posts)
       #q=P.Post.all().filter('user =',users.get_current_user())
       self.render('index.html', user=user, posts=posts)

    def post(self):
     user = users.get_current_user() or "unknown"
     author = users.get_current_user()
     title = self.request.get('title')
     content = self.request.get('content')
     p = P.Post(author=author, title=title, content=content)
     p.put()
     res = memcache.get('posts_%s'%users.get_current_user().user_id())

     if res:
        res+=p
        if len(res)>5:
         res=res[1:]
     else:
        res=[p]

     memcache.replace("posts_%s"%user.user_id(),value=res)
     self.redirect('/')

当浏览器重定向到“/”时,最后添加的项目不在列表中(仅在重新加载后添加)。仅当我在开发服务器上时才会发生这种情况(在 GAE 上它可以正常工作),我想知道它是否会在 GAE 上发生以及这段代码有什么问题

任何建议都将受到高度赞赏。

UPD:thx,我把钥匙弄的一样,但问题仍然存在

【问题讨论】:

    标签: python google-app-engine memcached


    【解决方案1】:

    你根本没有在这里访问内存缓存。您在 post 和 get 方法中使用了不同的密钥格式:在 get 中,您使用“posts_user”,而在 post 中,您使用“user:posts”,因此永远找不到密钥,您会摔倒通过数据库查询。当然,由于最终的一致性,查询不是最新的,这可能是您首先使用 memcache 的全部原因。

    修复你的内存缓存键,这应该可以工作。

    【讨论】:

    • 我修复了按键,但仍然需要重新加载页面才能看到新帖子。在第一次重定向后,memcache 是否有可能更新太久而看不到新帖子?
    【解决方案2】:

    当您进行替换时,该项目可能不在内存缓存中。为什么在这种情况下使用替换?有什么理由不使用 memcache.set?在get函数中,还有一处key是posts_%s:与其他地方不一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-29
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多