当Google测试了Google Search服务的可用性后,发现速度是最影响Web应用的可用性的因素之一。相对于作用相同但是速度慢的应用,用户更喜欢速度快的应用。多来年,Google已经掌握了如何使应用运行更快,甚至是有上百万的用户访问这个应用。提高Web应用的速度的一个方法就是为存储使用分布式的内存缓存,而不是从磁盘中获取经常用的数据。
当你将信息放到DataStore上的时候,你的信息被永久地保存了,被保存在云中某个地方的磁盘中,甚至你的应用不在使用,也会被备份和维护。
内存缓存遍布于云中你的应用的所有的实例的内存中。也可能有专用的内存缓存服务器。因为内存缓存是临时的,没有必要把它保存到磁盘或备份。这就使得内存缓存比Datastore更快。
内存缓存基于一个叫做“memcached”的产品,它提供了一个多语言的高速的分布式缓存(in a number of languages)。memcached软件使用网络来保证数据的拷贝的同步。当数据在一个服务器上被更新了,这个更新就会被传递给参与了内存缓存的所有的其他服务器:http://www.danga.com/memcached/.
内存缓存的规则
内存缓存最基本的规则是在内存缓存中没有任何东西是被保证的。当被请求时,内存缓存尽它最大的努力返回你的数据。当你将数据放在缓存中时,你会指定想要数据在缓存中保持多久。比如,你可以要求的数据被保存一个小时。然而,如果你的应用实例在内存中运行缓慢,它们可能在几秒内扔掉你的数据来释放内存。
这种机制初看使得内存缓存几乎没有用。然而,如果你的应用在内存中运行不慢,内存缓存将会丢掉你的数据的可能性就很小。允许在一个特殊的时刻(once in a great while)丢掉数据使得内存缓存非常的快。这也意味着对于真正重要的数据,你不能只在内存缓存中存储一个备份。你必须在Datastore中保留一个备份。
结果对于一个可扩展的Web应用中的大量的数据,我们很高兴接受对这个内存缓存的妥协。如果数据偶尔丢失的话,数据元素可以被重建。也有一些数据比如登录的用户的数量,没有必要是精确的。
其他的内存缓存的规则如下:
?有一个内存缓存在你的应用实例之间共享。如果你在一个实例中存储了数据,这个数据对于所有的应用都是可用的。如果你从一个实例中删除数据,它将会在所有的实例中被删除。
?内存缓存操作起来就像一个巨大的分布式的Python字典。缓存中的每一个项目有一个唯一键。
?缓存中的每一个项目有一个失效时间,可以是几秒甚至是一个月。你可以忽略这个生命周期,缓存将尽它的可能保持这个对象。在内存缓存中典型的生命周期是大约10s到几个小时。你可以在缓存中替换这个对象并指定一个新的生命周期来延长生命周期。
将有意义的项目放到内存缓存中。它的大小是有限制的,所以你应当将适当的小的经常被使用的数据放到内存缓存中。
使用内存缓存