【问题标题】:Memcache get optimization with phpMemcache 使用 php 进行优化
【发布时间】:2012-10-31 00:20:58
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php optimization memcached


    【解决方案1】:

    没有深入了解“你到底在 memcache 中存储了什么以及为什么不使用其他解决方案(例如带有内存表存储引擎的数据库)......

    我会说多个请求的成本确实是一个问题——尤其是在远程节点/主机上运行 memcached 的情况下。对大型对象的单个请求很可能总体上更快 - 您仍然需要传输相同数量的数据,但与 200 件相比,不会产生额外的单独请求开销。

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

    【讨论】:

    • 我想说他正在尝试做的事情实际上会更快。与其存储一个庞大的单个对象并获取大部分不会使用的数据,不如将整个事情计算一次,然后逐页分解为所需的内容。这意味着当他从 memcache 中获取时,他只会得到他需要的东西(更少的数据),而且它仍然是一个请求。不过,我同意“你到底在存储什么”。
    • 我们在内存缓存中存储的究竟是什么重要吗?它是一些数据来识别我们拥有的数据库对象。我想要 memcache 的速度以进行优化,仅此而已。假设我需要第 1 页的项目 x、y 和 z 以及第 2 页的项目 x、y、z、a、b 和 c。整个想法是我想将 x、y、z 保存在 memcache 键中a, b,c 在另一个内存缓存键中。哪个更好?这种方法还是只是将 x、y、z、a、b 和 c 保存在一个内存缓存键中并在一个请求中检索整个内容?
    • @Bola 如果您总是想要整个组件集,那么单个请求会更有效率。
    • @hukir 他的问题指向总是拉回整个数据集,而不是一个子集。
    • @Bola 取决于所需的数据量。说只有 10% 的块,然后多次获取将是要走的路。但是,如果您使用大部分数据,那么单个会更好。
    猜你喜欢
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 2021-07-17
    • 2017-05-27
    • 2015-08-01
    • 2018-01-19
    相关资源
    最近更新 更多