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预热失败的主要内容,如果未能解决你的问题,请参考以下文章

为 memcached 和 Rails 组合片段和对象缓存的最佳方式

Memcached介绍

Memcached

导致资产预编译在heroku部署上失败的代码片段

Linux下运行memcached失败

如何解决memcached连接数过高导致后续连接失败的问题