这2天,才发现之前我们的某个开发人员使用java_memcached-release_2.0.1.jar是有问题的
在我们的某个模块里,需要2个memcached,分别提供不同的服务
于是,开发的人员就从网上粘贴来如下的码,分别生成2个MemcacheUtil类
在2个类里,分别初始化2个不同的mcc,这样做其实是有很大问题的 因为,在初始化MemCachedClient和SockIOPool时,均没有指定对应的name 这样,memcached client会默认生成一个name为default的pool 也就是说,即使你初始化了2个不同server对应的mcc,但实际上只有一个default的pool 这个pool里对应的memcache server完全取决于这2个类的初始化顺序 最后初始化的class,会覆盖掉第一次所用的server 因此,用这样的方式,实际上最后使用的还是其中的某一个memcache server 造成memcache中的数据全部乱掉 正确的方法应该是
初始化时,需要指定唯一的一个poolname,这样就能避免刚才的问题了
另外一个问题就是,用python或其它方式写入memcache中的数据,使用java client无法获取到
再查看了memcache client的源码后,发现了以下2点:
1. 它会默认对要存储的key进行URLEncoder的编码,如会把@给编码成%40
2. 在get调用时,如果没有传递参数asString,则它默认会对取到的value进行它自己的decode
所以,如果要想client能正确的取到没有编码过的数据,则需要
|
|