memcached客户端抛出java.lang.IllegalArgumentException: Key包含无效字符



memcache客户端似乎不支持UTF-8字符串作为其键。但我必须用i18n。怎么解决它?

. lang。非法参数异常:密钥包含无效字符:'' HK:00:A Kung Wan''net.spy.memcached.MemcachedClient.validateKey (MemcachedClient.java: 232)net.spy.memcached.MemcachedClient.addOp (MemcachedClient.java: 254)

这里的问题不是UTF编码。而是你的钥匙里有个空格。键不能包含空格、换行、回车或空字符。

产生异常的代码行在

下面
if (b == ' ' || b == 'n' || b == 'r' || b == 0) {
    throw new IllegalArgumentException
        ("Key contains invalid characters:  ``" + key + "''");
}

Base64在将密钥传递给memcached客户端的set()和get()方法之前对密钥进行编码

处理所有带有特殊字符、控制字符、新行、空格、unicode字符等的memcached密钥的一般解决方案是在将密钥传递给memcached的set()和get()方法之前对其进行base64编码。

// pseudo code for set
memcachedClient.set(Base64.encode(key), value);
// pseudo code for get
memcachedClient.get(Base64.encode(key));

这将它们转换为memcached保证能够理解的字符。此外,base64编码没有性能损失(除非你是一个纳米性能优化家伙),base64是可靠的,只需要大约30%的额外长度。

工作像一个魅力!

相关内容

最新更新