2012-10-30 132 views
3

好吧得到优化,所以我有关于Memcache的一些怪异儿的问题。我的缓存技术的基本思想是保存我的PHP脚本在Memcached服务器中请求的数据。我和我的团队面临的主要问题是,有时保存大量数据有时可能会通过Memcached中项目数据大小的1MB限制。 为了进一步解释方法设想以下: 我们有大量的数据来配置一定的对象和数据包含大量的文字和numbers..etc的。我们需要保存近200个这些对象,所以我们的第一个方法是将整个200个对象缓存到Memcached中的一个大项目中。该项目可能会超过1Mb的限制,所以我们认为我们可以采用新的方法。 我们有去的新方法是,我们的数据配置对象分解成更小的积木(因为我们没有在同一个页面中使用的所有数据),那么我们将使用更小的积木得到如数我们将在该特定页面中使用的数据。内存缓存使用PHP

的问题如下: 是否GET速度变化,当你得到更大的数据?或者,Memcached服务器并行处理的请求数量限制会妨碍第二种方法,因为我们会使用多GET来获取配置对象的多个构建块?

我知道这是一个奇怪的问题,但它对于我们要采用的新方法至关重要,因为它会确定我们将使用的构建块的大小,以及我们是否会向其添加数据需要。

编辑1: 请记住,我们可以在第二种方法中使用MULTIGET函数,因此我们不必连接到Memecached并等待我们获得的每一位数据的响应。所以并行请求将被用来获取多个密钥。

回答

3

并不进入“

我说你到底你在内存缓存存储和为什么不使用另一种解决方案(如DB具有存储表存储引擎)......的费用多个请求的确是一个问题 - 尤其是在远程节点/主机上运行memcached的情况下。大型对象的单个请求很可能总体上更快 - 您仍然需要传输相同数量的数据,但不会有额外的单独请求开销与200件。

顺便说一句...如果你使用的是APC,并且你没有很多这些巨大的项目,你可以用它来代替memcache来做本地用户级内存缓存 - 最大容量可以通过PHP配置设置。您不会得到跨主机访问/共享分享的好处,但它很快且简单。

+0

我会说什么,他正试图做的实际上是这样更快。不是存储大量的单个对象,而是获取大量不会使用的数据,整个事情只需计算一次,然后逐个分解为所需的数据。这意味着当他从memcache中提取时,他只会得到他需要的东西(更少的数据),而且它仍然是一个请求。不过,我同意“你存储的是什么”。 – hukir

+0

这与我们在memcache中存储的内容无关吗?这是一些数据来标识我们拥有的数据库对象。我想要优化的memcache的速度。比方说,我需要的物品的x,y和z为第1页和物品X,Y,Z,A,B和C的第2页的整体思路是,我要保存的X,Y,Z在内存缓存键a,b,c在另一个memcache键中。哪个更好?这种方法或只是将x,y,z,a,b和c保存在一个memcache密钥中,并在一个请求中检索整个事物? – Bola

+0

@Bola如果您始终需要整套组件,单个请求将更加高效。 – Ray