1

我最近使用 php 的 ob_gzhandler 函数实现了我的内容的 gzip 压缩,这让事情变得非常简单。

我现在正在尝试将此内容添加到我的内存缓存中,并希望也有一种简单的方法可以做到这一点,但我无法在网上找到任何关于完成此操作的信息。

我过去只使用 memcache 来存储保存在变量中的数据,但是使用 ob_gzhandler,我没有包含数据的变量。所以不幸的是,我什至不知道从哪里开始。

谢谢皮特

-----编辑以获取更多信息------------- 正如科迪在下面评论的那样,显然我的问题是/含糊不清。很抱歉,我正在尝试提供尽可能多的信息,但在这个过程中我真的有点迷失了。

当我之前使用过 memcache 时,我根据 url 请求的哈希检查了数据是否存在于 memcache 中。如果有匹配,我会抓取缓存的数据。如果没有,那么我会制作页面并将其存储在缓存中。

现在我正在尝试做同样的事情,但使用 php ob_gzhandler 压缩数据。

但正如 Ciaran 所说,仅仅存储非 gzip 压缩数据可能更有意义。

同时,存储 gzip 压缩的版本会更好,因为它更小,所以我可以在缓存中存储更多,而且不是几乎所有的浏览器都兼容 gzip 吗?

4

3 回答 3

1

听起来您在询问被动缓存,其中您有一些查询缓存的代码,并且在缓存未命中时,它会生成数据,将其插入缓存然后返回。简而言之,您的代码将始终返回一大块数据,但是无论它是通过计算还是通过访问缓存来返回,好吧,被调用者代码并不关心。

这个对吗?

最终,您的问题很模糊,并且没有包含足够的信息。

于 2009-04-04T04:42:25.957 回答
1

ob_gzhandler() 将返回一个字符串或 false,这取决于客户端浏览器是否支持 gzip、deflate 或无编码。您可能正在通过 ob_start() 或类似方法使用此功能。

因为每个客户端的结果不同,所以尝试缓存结果并不是一个好主意(即在某些情况下它会是 FALSE,在某些情况下它会是一个“放气”编码的响应,而在其他情况下它是将是一个“gzip”编码的响应)。

缓存正在被 gzip 压缩的内容似乎更有意义,并在每个请求中重新压缩它——实际上这不应该是一个巨大的开销。

于 2009-04-04T11:33:23.147 回答
0

如果只是为了减少传输到存储中的字节数,那么有许多客户端可以在将数据发送到 memcache 之前对其进行压缩 - 取决于大小(压缩 50K 很有用,5 字节,不多)。正如@Ciaran 所说,为最终交付重新压缩的开销(如果需要)并没有那么多。

于 2009-04-04T16:54:44.450 回答