当前位置:  开发笔记 > 编程语言 > 正文

Google App Engine:Memcache还是Static变量?

如何解决《GoogleAppEngine:Memcache还是Static变量?》经验,为你挑选了2个好方法。

好吧,我想我在这里有一个非常基本的疑问:

我正在开发一个关于GAE(Java)的应用程序,并对返回大量实体的数据存储区执行查询,因此我需要对其进行缓存.我使用的是memcache并且工作得很好,但是如果我将实体列表保存在静态变量中,整个请求的速度是使用memcache的两倍.我认为那是因为我不是一直在反序列化实体.

在memcache上使用静态变量会有什么缺点?我不知道我的应用程序在云中是否有多个实例,因此我的静态变量的几个实例?

我正在尝试缓存的实体列表是上周的最佳(更高分)帖子.我拿这个列表并选择5个随机帖子并在几页中显示它们.

谢谢您的帮助!



1> Peter Recore..:

App Engine通过创建应用程序的新实例来扩展,因为用户数量会增加.正如drudru所说,不同的用户可能会被不同的实例服务.通常,memcache是​​存储您希望全局一致的最快的地方.但是,在您的情况下,可能还有一些改进空间.

你提到你有一个帖子列表,你随机选择5向用户显示.如果2个不同的用户看到不同的5个集合,这是否重要?无论如何,如果你选择随机的,也许没关系.然后你可以在memcache中存储完整的帖子列表,并从memcache中拉出5个随机的帖子并将它们存储在一个静态变量中.

第二,你到底记得什么,你是如何把它拉出来的?你是否在memcache中存储了一大堆完整的帖子,将它们全部存入,然后选择5?也许你可以只下载帖子列表,选择5,只获得你需要的5?如果您认为反向排序会减慢您的速度,那么这可能会有所帮助.你得到它们后,你是否正在对帖子进行任何处理?如果是这样,是否可以缓存该处理的结果?



2> Thilo..:

当下一个请求命中时,您不能依赖静态变量(或JVM内存中的任何其他内容),因为Google可以随时启动和停止虚拟机.从它的外观来看,它们似乎更喜欢在同一个JVM中启动其他JVM而不是其他线程,从而加剧了这个问题.

但是,您应该能够将静态变量用作缓存层,前提是您可以从其他位置加载数据(如果它已经消失).

我也不会尝试过度使用内存,必须有一个可以使用多少内存的配额.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有