请教一个问题,在php里面把一段字符串使用gzip压缩了并缓存进redis,然后再在ngx_lua处读取redis直接输出到浏览器,lua这里需要解压再输出到浏览器?我自己试了一下,发现浏览器没有自动解压显示出来!
php里面我使用的是gzcompress函数
谢谢! --
请教一个问题,在php里面把一段字符串使用gzip压缩了并缓存进redis,然后再在ngx_lua处读取redis直接输出到浏览器,lua这里需要解压再输出到浏览器?我自己试了一下,发现浏览器没有自动解压显示出来!php里面我使用的是gzcompress函数谢谢! --
2016-11-25 15:45 GMT+08:00 <7631...@qq.com>: 请教一个问题,在php里面把一段字符串使用gzip压缩了并缓存进redis,然后再在ngx_lua处读取redis直接输出到浏览器,lua这里需要解压再输出到浏览器?我自己试了一下,发现浏览器没有自动解压显示出来!使用 gzip 压缩,应该是为了减少 redis 传输数据量么? 如果是,可以添加 version 字段,这个 version 字段存放可以是数据的 md5 或自增序列。如果 version 有变化,则提取新数据并缓存。如果没有变化,完全可以直接用缓存,从而降低 redis 数据传输量。 php里面我使用的是gzcompress函数这里需要你确定一下 php 代码中的压缩方法内部调用的是哪个库,通过 LuaJIT 方式调用对应的解压缩函数就好。
谢谢! -- -- YuanSheng Wang---------------------------------------My Github: https://github.com/membphisOpenResty lover ^_^ --
在 2016年11月25日 下午6:26,YuanSheng Wang <yuan...@openresty.org>写道:2016-11-25 15:45 GMT+08:00 <7631...@qq.com>: 请教一个问题,在php里面把一段字符串使用gzip压缩了并缓存进redis,然后再在ngx_lua处读取redis直接输出到浏览器,lua这里需要解压再输出到浏览器?我自己试了一下,发现浏览器没有自动解压显示出来!使用 gzip 压缩,应该是为了减少 redis 传输数据量么? 如果是,可以添加 version 字段,这个 version 字段存放可以是数据的 md5 或自增序列。如果 version 有变化,则提取新数据并缓存。如果没有变化,完全可以直接用缓存,从而降低 redis 数据传输量。 php里面我使用的是gzcompress函数这里需要你确定一下 php 代码中的压缩方法内部调用的是哪个库,通过 LuaJIT 方式调用对应的解压缩函数就好。 gzip的算法是开放而且有标准的,不用做跨语言的调用。而且怎么用 LuaJIT 调用 PHP 的内部函数呢? 谢谢! -- -- YuanSheng Wang---------------------------------------My Github: https://github.com/membphisOpenResty lover ^_^ --
嗯嗯,非常感谢您的回复。request里面都有:Accept-Encoding:gzip, deflate, sdchresponse里面也有:Content-Encoding:gzip我想的是,我用php使用标准的gzip压缩了字符串存放到redis里面,在lua里面去读这个缓存的时候,还需要解压?我感觉应该可以不用再次解压的,直接输出压缩了的,应该是可以正常解压显示么?因为浏览器不是会自己解压吗?还是我想法不对?谢谢在 2016年11月25日星期五 UTC+8下午6:54:23,WenMing写道:在 2016年11月25日 下午6:26,YuanSheng Wang <yuan...@openresty.org>写道:2016-11-25 15:45 GMT+08:00 <7631...@qq.com>: 请教一个问题,在php里面把一段字符串使用gzip压缩了并缓存进redis,然后再在ngx_lua处读取redis直接输出到浏览器,lua这里需要解压再输出到浏览器?我自己试了一下,发现浏览器没有自动解压显示出来!使用 gzip 压缩,应该是为了减少 redis 传输数据量么? 如果是,可以添加 version 字段,这个 version 字段存放可以是数据的 md5 或自增序列。如果 version 有变化,则提取新数据并缓存。如果没有变化,完全可以直接用缓存,从而降低 redis 数据传输量。 php里面我使用的是gzcompress函数这里需要你确定一下 php 代码中的压缩方法内部调用的是哪个库,通过 LuaJIT 方式调用对应的解压缩函数就好。 gzip的算法是开放而且有标准的,不用做跨语言的调用。而且怎么用 LuaJIT 调用 PHP 的内部函数呢? 谢谢! -- -- YuanSheng Wang---------------------------------------My Github: https://github.com/membphisOpenResty lover ^_^ -- --
我觉得是可以的,毕竟浏览器不关心这个数据是 NGINX 还是 PHP 压缩的。前提是从 redis 里面读取出来的数据,没有被 http://nginx.org/en/docs/http/ngx_http_gzip_module.html 模块再次处理一次。需要你自己代码设置下 response 的Content-Encoding。在 2016年11月26日 上午10:06, <7631...@qq.com>写道:嗯嗯,非常感谢您的回复。request里面都有:Accept-Encoding:gzip, deflate, sdchresponse里面也有:Content-Encoding:gzip我想的是,我用php使用标准的gzip压缩了字符串存放到redis里面,在lua里面去读这个缓存的时候,还需要解压?我感觉应该可以不用再次解压的,直接输出压缩了的,应该是可以正常解压显示么?因为浏览器不是会自己解压吗?还是我想法不对?谢谢在 2016年11月25日星期五 UTC+8下午6:54:23,WenMing写道:在 2016年11月25日 下午6:26,YuanSheng Wang <yuan...@openresty.org>写道:2016-11-25 15:45 GMT+08:00 <7631...@qq.com>: 请教一个问题,在php里面把一段字符串使用gzip压缩了并缓存进redis,然后再在ngx_lua处读取redis直接输出到浏览器,lua这里需要解压再输出到浏览器?我自己试了一下,发现浏览器没有自动解压显示出来!使用 gzip 压缩,应该是为了减少 redis 传输数据量么? 如果是,可以添加 version 字段,这个 version 字段存放可以是数据的 md5 或自增序列。如果 version 有变化,则提取新数据并缓存。如果没有变化,完全可以直接用缓存,从而降低 redis 数据传输量。 php里面我使用的是gzcompress函数这里需要你确定一下 php 代码中的压缩方法内部调用的是哪个库,通过 LuaJIT 方式调用对应的解压缩函数就好。 gzip的算法是开放而且有标准的,不用做跨语言的调用。而且怎么用 LuaJIT 调用 PHP 的内部函数呢? 谢谢! -- -- YuanSheng Wang---------------------------------------My Github: https://github.com/membphisOpenResty lover ^_^ -- --
local encoding = ngx.req.get_headers()["Content-Encoding"] if encoding == "gzip" then local body = ngx.req.get_body_data() if body then local stream = zlib.inflate() local r = stream(body); ngx.req.set_body_data(r); local jsonObject = json_decode(r)返回的jsonObject是个nil,ngx.say(r)是可以读取到请求body里面正确的string,但进行json.decode的时候就是无法获取到正常的jsonObject,还望大神指教,