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是个好东西。下次好好研究。只不过担心它不稳定(吃螃蟹要付出代价啊)。