好的,我有一些关于Memcache的奇怪问题。我的缓存技术的基本思想是保存我的PHP脚本在Memcached服务器中请求的数据。我和我的团队面临的主要问题是,有时保存大量数据有时会传递Memcached中项目数据大小的1MB限制。 为了进一步解释这种方法想象如下: 我们有很多数据来配置某个对象,并且该数据包含大量的文本和数字......等等。我们需要保存这些对象的近200项,因此我们采用的第一种方法是将整个200个对象缓存到Memcached中的一个大项目中。该项目可能超过1Mb的限制,因此我们认为我们可以采用新的方法。 我们采用的新方法是,我们将配置对象的数据分解为更小的构建块(并且因为我们不使用同一页面中的所有数据),然后我们将使用较小的构建块来准确获取我们将在该特定页面中使用的数据。
问题如下: 当您获得更大的数据时,GET速度会发生变化吗?或者Memcached服务器并行处理的请求数量的限制是否会妨碍第二种方法,因为我们会使用多GET来获取配置对象的多个构建块?
我知道这是一个奇怪的问题,但它对于我们要使用的新方法至关重要,因为它将决定我们将使用的构建块的大小以及我们是否会在需要时添加数据到。
编辑1: 请记住,我们可以使用MULTIGET函数和第二种方法,因此我们不必连接到Memecached并等待我们获得的每一位数据的响应。因此并行请求将用于获取多个密钥。
答案 0 :(得分:3)
没有进入'你在memcache中存储什么,以及为什么不使用其他解决方案(如带有内存表存储引擎的数据库)....
我认为多个请求的成本确实是一个问题 - 尤其是在远程节点/主机上运行的memcached。对大型对象的单个请求很可能总体上更快 - 您仍需要传输相同数量的数据,但不会有200个额外的单独请求开销。
BTW ...如果你正在使用APC并且你没有很多这些巨大的项目,你可以用它代替memcache来做本地用户级内存缓存 - 最大的大小很容易通过php调整配置设置。您不会从主机上获得分布式访问/共享的好处,但它快速而简单。