首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pylibmc存储的数据不能在php memcached中解压缩。

pylibmc存储的数据不能在php memcached中解压缩。
EN

Stack Overflow用户
提问于 2012-12-17 10:40:55
回答 2查看 1.6K关注 0票数 1

我们有一个应用程序,在这个应用程序中,我们使用python存储大量数据,在python中使用pylibmc,在php端使用php-memcached library.As (摘要)。

  • pylibmc诉1.2.3
  • php-memcached v.2.0.1
  • libmemcached v1.0.8。

其他一切都很好,除了压缩发挥作用。这就是python中数据压缩的方式。

代码语言:javascript
复制
import pylibmc

mem = pylibmc.Client(['10.90.15.104:11211'], binary=True)
mem.set('foo','this is a rather long string. this is a rather '+
'long string. this is a rather long string. this is a rather' + 
'long string. this is a rather long string', 0, 10)

签入telnet时,我们会看到一些混淆的值,这意味着它被压缩了。现在用php阅读它。

代码语言:javascript
复制
$memd = new Memcached();
$memd->addServer('10.90.15.104', 11211);
echo $memd->get('foo');

当上面运行时,我们得到相同的乱码值,这意味着它没有被解压缩。pylibmc使用zlib,因此我也将php的压缩类型更改为zlib。还需要做什么其他的设置?请帮帮忙。

下面是memcached在pylibmc中设置字符串后的输出,以进一步参考

代码语言:javascript
复制
get foo
VALUE foo 8 40
x+��,V�D��Ē��"����t�⒢̼t=���g\5#
END

下面是memcached的输出,用于使用PHP的memcached客户机存储的字符串:

代码语言:javascript
复制
get foo
VALUE foo 48 44
�x�+��,V�D��Ē��"����t�⒢̼t=���g\5#
END

如你所见,这里面有可疑的东西。pylibmc中的压缩大小为40字节,使用php-memcached压缩的数据为44字节。还请注意使用pylibmc存储的标志为8,使用php-memcached存储时为48!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-17 15:41:48

我认为您所观察到的原因是,memcache本身没有实现压缩,因此每个库都以各自的方式进行压缩,只需比较用于指示正在使用的压缩的标志。

吡咯烷酮定义

#define PYLIBMC_FLAG_ZLIB (1 << 3) (这是标志== 8)

并由php-memcached

#define MEMC_VAL_COMPRESSED (1<<4)

#define MEMC_VAL_COMPRESSION_ZLIB (1<<5)

#define MEMC_VAL_COMPRESSION_FASTLZ (1<<6)

所以我认为,除非你愿意修改这个库中的一个使它的标志与另一个保持一致,否则就没有出路了

编辑: Ok,下面是支持pylibmc和pylibmc同步压缩支持的小补丁。请看我的集线器吡咯烷酮叉

-它只在字符串上工作,所以如果您想要存储对象,就必须自己进行反序列化(JSON)。

票数 3
EN

Stack Overflow用户

发布于 2012-12-19 08:20:51

拉伯

就像你说的,我做了改变

  1. 将php压缩方法从FASTLZ改为ZLIB
  2. 将pyLibmc标志更改为_pylibmcmodule.h文件中的1 << 5并重新安装pylibmc #定义PYLIBMC_FLAG_ZLIB (1 << 5)

这些变化正确吗?还需要做些什么吗?因为它不起作用,导致以下错误

代码语言:javascript
复制
Warning: Memcached::get(): unknown payload type in uaTestMemcached.php on line 5

bool(false)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13912530

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档