用php优化Memcache

用php优化Memcache,php,optimization,memcached,Php,Optimization,Memcached,好吧,我有一些关于Memcache的奇怪的er问题。我的缓存技术的整个基本思想是将PHP脚本请求的数据保存在Memcached服务器中。我和我的团队面临的主要问题是,有时保存大量数据有时会超过Memcached中项数据大小的1MB限制。 要进一步解释该方法,请设想以下内容: 我们有很多数据来配置某个对象,这些数据包含很多文本和数字……等等。我们需要保存这些对象中的近200个项,因此我们采用的第一种方法是将整个200ish对象缓存到Memcached中的一个大项中。该项可能超过1Mb的限制,因此我

好吧,我有一些关于Memcache的奇怪的er问题。我的缓存技术的整个基本思想是将PHP脚本请求的数据保存在Memcached服务器中。我和我的团队面临的主要问题是,有时保存大量数据有时会超过Memcached中项数据大小的1MB限制。 要进一步解释该方法,请设想以下内容: 我们有很多数据来配置某个对象,这些数据包含很多文本和数字……等等。我们需要保存这些对象中的近200个项,因此我们采用的第一种方法是将整个200ish对象缓存到Memcached中的一个大项中。该项可能超过1Mb的限制,因此我们认为可以采用新方法。 我们采用的新方法是,我们将配置对象的数据分解为更小的构建块(因为我们不在同一页面中使用所有数据),然后使用更小的构建块来获得我们在该特定页面中使用的数据量

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

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

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

不必进入“你到底在memcache中存储了什么,为什么不使用另一个解决方案(比如带有内存表存储引擎的DB)

我要说的是,多个请求的成本确实令人担忧——特别是在远程节点/主机上运行memcached时。对大型对象的单个请求很可能总体上更快——您仍然需要传输相同数量的数据,但与200个请求相比,不会有额外的单独请求开销


顺便说一句。。。如果您使用的是APC,并且没有很多这样的大型项目,那么可以使用它而不是memcache来执行本地用户级内存缓存——通过php配置设置可以轻松调整最大大小。您不会从跨主机的分布式访问/共享中获得好处,但它又快又简单。

我想说,通过这种方式,他尝试做的事情实际上会更快。与存储一个庞大的单一对象和获取一大部分不会被使用的数据不同,整个过程只需计算一次,然后逐页分解为所需内容。这意味着,当他从memcache获取数据时,他只会得到他所需要的(更少的数据),而这仍然是一个单一的请求。我同意“你到底在存储什么”这个说法。我们到底在memcache中存储什么重要吗?这是一些用来识别我们拥有的数据库对象的数据。我想要memcache的优化速度,仅此而已。假设我需要第1页的项目x、y和z,第2页的项目x、y、z、a、b和c。整个想法是我想在一个memcache密钥中保存x,y,z,在另一个memcache密钥中保存a,b,c。哪个更好?这种方法或只是将x、y、z、a、b和c保存在一个memcache键中,然后在一个请求中检索整个内容?@Bola如果您总是想要整个组件集,那么单个请求会更有效。@hukir的问题是总是将整个数据集而不是子集拉回来。@Bola取决于所需的数据量。假设只有10%的块,那么多个GET就是最好的选择。但是如果你使用的是大部分的数据,一个单一的会更好。