memcached预热失败
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了memcached预热失败相关的知识,希望对你有一定的参考价值。
缓存逻辑: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; }
以上是关于memcached预热失败的主要内容,如果未能解决你的问题,请参考以下文章