最近实际用起来我发现,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作为客户端,改天试试,呵呵。
分享到:
相关推荐
NULL 博文链接:https://sharron5.iteye.com/blog/794600
Memcache java jar 包 java_memcached-release_2.5.1.jar import com.danga.MemCached.MemCachedClient; import net.spy.memcached.MemcachedClient;
com.danga package 下的 memcached.jar
memcached在JAVA中调用的DEMO,直接导入项目,无需新建工程。前提是必须按安装memcached,并启动memcached server服务
import com.danga.MemCached.*; import java.util.Date; public class MemCached { protected static MemCachedClient mcc; protected static Logger log; protected static MemCached memCached = new ...
最近一直在做一个项目的前期设计工作,考虑到后期系统的扩展和性能问题也找了很多解决方法,有一个就是用到了数据库的缓存工具memcached(当然该工具并不仅仅局限于数据库的缓存)。先简单的介绍下什么是memcached。...
java-memcached-2.6.6.jar
Memcache java jar 包 java_memcached-release_2.5.1.jar
Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大...
memcached-library, 一个与Memcached缓存系统接口的CodeIgniter库 用于CodeIgniter的#Memcached 库##Description这个库是为了帮助一个基于CodeIgniter的项目与 1或者更多的Memcached服务器( ...
Memcached由Danga Interactive开发,其最新版本发布于2010年,作者为Anatoly Vorobey和Brad Fitzpatrick。用于提升LiveJournal . com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大...
memcached的官方客户端,就是基于这个Socket组件的
NULL 博文链接:https://da-zhuang.iteye.com/blog/2234078
memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJournal所发展的,但被许多软件(如MediaWiki)所使用。这是一套开放源代码软件,以BSD license授权协议发布。[1] memcached缺乏认证以及安全...
Memcached是什么? Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
Memcached是高性能的,分布式的...Memcached由Danga Interactive开发,用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次,用户700万。Memcached将数据库负载大幅度降低,更好的分配资源,更快速访问。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。 Memcached是一种基于...
关于这个东西,相信很多人都用过,本文意在通过对memcached的实现及代码分析,获得对这个出色的开源软件更深入的了解,并可以根据我们的需要对其进行更进一步的优化。末了将通过对BSM_Memcache扩展的分析,加深对...
hibernate-memcached, 在Hibernate中,使用Memcached作为第二级分布式缓存的库 休眠 memcachedHibernate中使用...基于优秀的spymemcached客户端包含对 Whalin ( danga ) memcached客户端的支持支持实体和查询缓存。帮
集中式缓存系统 memcached ,memcached是一套分布式的快取系统,当初是Danga Interactive为了LiveJou...