danga的MemcachedClient的几个缺陷

发表于:2015-6-12 13:40

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:石头城    来源:51Testing软件测试网采编

  最近实际用起来我发现,java版danga的memcached客户端有一些问题,
  记录如下:
  1,set方法直接用Date对象设置过期时间
  memcached协议规定过期时间是个long值,如果n小于30天的秒数则表示该数据会在n秒后过期,否则n是unix时间。
  在danga的客户端中,接口直接用Date对象来设置时间,不但绕了一圈,还带来一个严重的问题:无法应对memcached服务器与客户端jvm的时间不同步的情况!而本来我直接用过期秒数就很方便,无需考虑时间同步。
  这个很要命。
  属于严重的设计缺陷。
  2010年9月30日补充 :有同事说可以用 new Date(300)这样的形式,设置出来的结果就是过期秒数。老实说,这种技巧是不应该被发现的。
  2,incr,decr,counter方法没有过期时间参数。
  这个也属于设计缺陷。
  这使得用memcached无法保持那种需要具有实效的计数器。
  某些场合,譬如记录用户的错误登录次数,我需要隔断时间就清零,danga限制我这么干。
  当然,我们可以用set先存储一个Long值来绕过这个限制,但这会同时带来另一个问题:默认的MemcachedClient在序列化基本数据类型时用了特殊的格式(NativeHandler,带来的问题就是存储的数据只能由java client来解析),因此数字在memcached服务器中无法使用incr,decr命令。
  看了源码,我发现memcachedclient有个属性primitiveAsString可以控制这个序列化选择。万幸,把它设为true,我绕过去了。
  官方网站推荐用spymemcached作为客户端,改天试试,呵呵。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号