memcached预热失败

来源:互联网 发布:璟亦诚读屏软件 编辑:程序博客网 时间:2024/04/25 15:00

缓存逻辑:set和get方法通过中间层SocketServer,由SocketServer去操作缓存(同步备用缓存等)

预热逻辑:在SocketServer里面打日志,通过日志去预热新缓存

出现问题:部分缓存预热失败-无法从原缓存里面读取信息

排查:

1.首先看写缓存的时候,是不是写进去了,发现确实是写进去了

2.看缓存日志,确实也打印正确

3.直接连接memcached,发现无法取出日志中打印的key,估计是一些特殊符号作了某种转译

4.从memcached查找,发现里面的特殊符号确实做了转译,例如@符号转换为%40,至此原因已排查,只要在预热的时候取缓存加上转译

5.查找原因,发现是通过MemcachedClient的时候,会对key进行URL编码

private String sanitizeKey(String key) throws UnsupportedEncodingException {  return this.sanitizeKeys?URLEncoder.encode(key, "UTF-8"):key;}

 

0 0
原创粉丝点击