首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

当memcached的key替url时

2012-10-27 
当memcached的key为url时memcached的客户端最著名的是这2个:memcached client for java和spymemcached。前

当memcached的key为url时

memcached的客户端最著名的是这2个:memcached client for java和spymemcached。前者,使用最广泛。稳定性比较好。后者存取速度会高于前者,但是稳定性不好。我采用了前者。

?

但有一天,我需要将url作为key存入memcached,却怎么也存不进去。而直接用memcached命令set,是可以存进去的。看来是memcached client for java不支持吗?

?

网上找了找资料,查到一个叫做“xmemcached”的。号称性能比前2个还要厉害。我下载了试了试,版本号是xmemcached-1.2.4。它里面有一个选项sanitizeKeys,当选择用URL当key的时候,MemcachedClient会自动将URL encode再存储。于是我设置成

memcachedClient.setSanitizeKeys(true); 同时配合另一个选项:commandFactory ,设置成net.rubyeye.xmemcached.command.TextCommandFactory。成功了!可以设置url为key了。

?

但是存入到memcached的内容出现了乱码。郁闷了。

于是再试:

注释掉这句memcachedClient.setSanitizeKeys(true);

将commandFactory 设置成net.rubyeye.xmemcached.command.BinaryCommandFactory。即采用二进制协议。成功存入到memcached,但内容还是乱码。

无语。

无意中,又翻了翻memcached client for java。找了一下源代码,发现它也有一个选项sanitizeKeys。原来它的默认值是true。意思是比如key为“/abc”,那么要用get('%2Fabc'),才能得到value。

哈哈。原来如此!!

然后我设置setSanitizeKeys(false)。set一个key为"/abc",get('/abc')得到了value!而且没有乱码。

不过,也许是我摸得不太熟。xmemcached是个好东西。下次好好研究。只不过担心它不稳定(吃螃蟹要付出代价啊)。

1 楼 dennis_zane 2010-03-26   hi,我是xmemcached的作者
你所说的乱码是什么意思?能提供下测试所用的key和value吗?方便我重现看看

热点排行