惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Security @ Cisco Blogs
H
Hacker News: Front Page
P
Privacy International News Feed
N
News and Events Feed by Topic
T
Threatpost
Simon Willison's Weblog
Simon Willison's Weblog
S
Schneier on Security
K
Kaspersky official blog
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
Security Latest
Security Latest
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
www.infosecurity-magazine.com
www.infosecurity-magazine.com
C
CERT Recently Published Vulnerability Notes
L
Lohrmann on Cybersecurity
Jina AI
Jina AI
P
Proofpoint News Feed
AI
AI
雷峰网
雷峰网
T
Tailwind CSS Blog
Engineering at Meta
Engineering at Meta
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
博客园 - 叶小钗
Webroot Blog
Webroot Blog
Apple Machine Learning Research
Apple Machine Learning Research
SecWiki News
SecWiki News
罗磊的独立博客
N
Netflix TechBlog - Medium
Martin Fowler
Martin Fowler
Google DeepMind News
Google DeepMind News
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
博客园 - Franky
Schneier on Security
Schneier on Security
The GitHub Blog
The GitHub Blog
S
Security Affairs
Blog — PlanetScale
Blog — PlanetScale
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
月光博客
月光博客
D
Docker
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Securelist
W
WeLiveSecurity
T
Troy Hunt's Blog
A
Arctic Wolf
博客园 - 司徒正美

博客园 - gavin_l

我们为什么需要另一个“桌面助手”? MongoDB 多实例安装成服务 Hyper-v 中 CentOS 连接外网之有线网卡 VMware下 CentOS 连接外网问题(笔记) Mongo.exe 无法定位程序输入点terminate于动态链接库 *.dll的解决办法 你可能不知道的 10 条 SQL 技巧,涨知识了! MySql5.7.* 多实例安装部署 词组查询以及多值映射等SolrNet使用中的细节问题 (转)前端不为人知的一面--前端冷知识集锦 (转)jQuery插件开发精品教程,让你的jQuery提升一个台阶 在ASP.NET MVC中,使用Bundle来打包压缩js和css(转) 设计模式 ASP.NET应用程序与页面生命周期 .Net内存泄露原因及解决办法 C#反射Assembly 详细说明 (转)面向程序员的数据库访问性能优化法则 ab 压测工具使用 svn使用教程及常见问题解决方案 日期格式转换
(原)使用 memcache 使用过程中可能遇到的问题
gavin_l · 2016-03-09 · via 博客园 - gavin_l

在项目优化中,使用到了memcache,刚开始不能用,后来期间总会偶尔抛出异常,刚开始怀疑动态库版本问题,后来尝试了各种替换依旧误解,搞得我日思夜想的,天天惦记着他。。=_=

下午拿出半天时间,进行错误精准定位,问题解决了,,,整理一下,可能会遇到的问题。

一、MemcachedClient 对象或者所在的类为静态全局的,否则,会因为多实例共抢bufferstream资源导致异常。如下图:

二、存入的缓存中的key值中不能包含空格,否则,会偶尔抛出上图错误。key的长度理论上不能超过250字节,value值不能超过1M,永久期限的最长期限是30天(程序内部决定)。

三、如果项目中使用了log4,则需要log4动态库,memcache动态库以及ICSharpCode.SharpZipLib动态库版本一致,否则引起log程序集版本问题。最佳解决方案,下载一个动态库包,包含这三个动态库的那种。

四、如果存取“值”类型的数据,在获取前,一定要判断是否存在该键值,避免 int a=null; 这种错误。

-------------------------------------------------------------------------------------------------------

关于memcache服务集群时,客户端默认使用的路由算法验证问题:

关于路由使用到的算法(余数哈希、一致性哈希),请参考以下两篇不错的博文:

http://www.cnblogs.com/mecity/archive/2011/06/13/Memcached.html

http://www.cnblogs.com/xrq730/p/4948707.html

实验设计思路:

      按照余数哈希和一致性哈希算法的特点,我们手动创建几个key值,其特点是,key值的哈希值差异较大,按服务器数取余后分布均匀,添加服务器 时,取余后较之以前差异大,但与之前部分取余有交叉。取某一版本client实验,如果路由规则是余数哈希算法,则键值会按照取余后的百分比分配到各个服务器上。如果是一致性哈希算法,则会在服务器上分布不均。添加服务器后,因为键值特殊设计,如果是余数哈希算法,取值的命中率将会骤降,而如果是一致性哈希算法,则命中率虽有下降,但影响不大。

测试客户端版本号:

memcache服务集群:

源码:

运行结果:

命中情况:

增加一个memcache服务器时:

运行结果:

结果表明上述程序中的推测正确。

命中情况:

根据上述设计思想及实验结果可知,此版本的客户端路由算法为余数哈希法。因为有三台服务器,六个键值的哈希值取余后刚好平局命中0/1/2 三个数,而实际服务器上的键值存取也平均分配到了三台服务器上。当增加一台服务器时,六个键值的哈希值余数结果仅有一个与之前一致,而实验结果刚好仅有一个值被命中。两种表现共同佐证了路由算法为余数哈希法。并且根据实验结果,可以推测出,键值 c 和 e 被存储到了11213服务器,a 和 d 被存储到了11214 服务器,b 和 f 被存储到了 11212 服务器。

附实际键值存储位置,以验证上述结论中的键值分布推测:

根据相关文档说明,新版的客户端已使用一致性哈希算法进行路由。因暂时未找到较新的动态库,此说法暂时搁置,以待后续验证。