`
yysct2005
  • 浏览: 87578 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

memcached

    博客分类:
  • java
阅读更多

做过的项目中Hibernate都是直接采用ehcache做为缓存,ehcache是一个好东西,采用内 存+文件系统结合可以胜任大多数情况,而且Hibernate和ehcache简直就是天造地设的一对,配合非常之默契。

但是在集群环境下缓存不同步的问题日益凸显,尽管最新版本的ehcache已经支持通过multicast来实现不同进程的缓存数据同步的功能,这样的结 构在集群的节点很多的时候性能下降得厉害,而且也不清楚其稳定性如何,因此ehcache暂且搁下。

对memcached早有耳闻,它是一种采用客户端服务器工作模式的集中式缓存系统,在很多非常大的网站中被采用。之前试过Java版的客户端API,发 现问题多多容易出错,由于同步的问题导致性能也超级差。最近Java的客户端API发布了新的版本,再次试用已不可同日而语,于是开始在项目中编写 Memcached的CacheProvider供Hibernate使用,使用过程中碰到一些问题,现在把这些问题的中心思想写出来,希望对大家有所帮 助。

首先ehcache和memcached的结构是完全不相同的。一个ehcache缓存系统可以同时定义多个cache,每个cache使用key- value方式存储数据,而memcahced只有key-value,它是一个大的哈希表。因此当我们在Hibernate配置了多个缓存的时候在 memcached就会出现问题,这些问题具体表现出来的异常是ClassCastException,因为不同的对象使用同一个key 进行缓存数据的读写 。这在ehcache中是没有问题的,因为这就是ehcache的结构。由此,为了让Hibernate使用 memcached缓存系统,我们需要在Provider这个级别上对缓存的key进行包装,我们可以将Hibernate传递过来的缓存名跟key结合 起来生成一个新的key,读写缓存数据都是用这个key,这样就不会发生缓存数据冲突导致的异常。

还有另外一个问题是关于查询的缓存,当我们执行一个稍微复杂点的HQL语句并对这个语句的执行禁果进行缓存的时候可能会出错,这些错误的原因就是key的 内容包含某些memcached通讯协议上定义的字符导致memcached在解析协议的时候出现异常,因此还是使用前面提到的方法,对key进行二次包 装。做法不外乎两种:直接将key转成hashcode然后把hashcode做为新的key;如果担心生成的hashcode可能会重复(事实上这个可 能性微乎其微),那还可以用MD5算法生成新的字符串来做为key,这样就不用担心我们的key存在一些memcached保留的字符而导致错误。

经过如此改造后,直接将DLOG4J改为memcached做为缓存系统,到目前未知还没发现什么问题,运行非常良好。

分享到:
评论

相关推荐

    memcached windows稳定版

    在终端(也即cmd命令界面)下输入 ‘c:\memcached\memcached.exe -d install’ 安装 3. 再输入: ‘c:\memcached\memcached.exe -d start’ 启动。NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动...

    memcached-win-32/64-1.4.4-14

    memcached的基本设置: -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -d ...

    memcached 64位 window

    memcached 64位 window memcached 64位 window memcached 64位 window

    memcached-2.4.2.jar memcached-2.4.2.jar

    使用memcached 方法 package com.war.common.util; import com.danga.MemCached.*; import java.util.Date; public class MemCached { protected static MemCachedClient mcc; protected static Logger log; ...

    Memcached v1.5.7 For Windows (附带Memcached和libevent源码两个版本)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    memcached for win32

    MemCached For Win32 服务器 -p 监听的端口 -l 连接的IP地址, 默认是本机 -d start 启动memcached服务 -d restart 重起memcached服务 -d stop|shutdown 关闭正在运行的memcached服务 -d install 安装memcached服务 -...

    Memcached v1.5.3 For Windows (附带Memcached和libevent源码)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    memcached安装软件 libevent magent memcached

    memcached安装软件 libevent-2.0.21-stable.tar.gz magent.tar.gz memcached-1.4.15.tar.gz

    C#使用memCached实现缓存

    C#使用memCached实现缓存 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度。...

    Memcached 1.4.13(Windows 32/64)最新稳定版

    memcached是一套分布式的快取系统,是一套开放源代码软件,以BSD license授权释出。是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。 以下是 memcached 在 Windows 系统下的 x86/x64 版本...

    MSM--memcached session manager(memcached+tomcat7共享session所需jar包)

    MSM--memcached session manager是一个高可用的Tomcat session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用。对于非黏性Session,...

    MemCached 缓存系统配置说明

    这里需要解释说明一下,很多开发者觉得Memcached是一种分布式缓存系统,但是其实Memcached服务端本身是单实例的,只是在客户端实现过程中可以根据存储的主键做分区存储,而这个区就是Memcached服务端的一个或者多个...

    memcached可视化工具

    memcached可视化工具memadmin,memcached可视化工具memadmin

    Memcached v1.5.4 For Windows (附带Memcached和libevent源码两个版本)

    Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的...

    memcached安装包以及MemCachedClient

    memcached, libevent, MemCachedClient

    Memcached安装包,windows版本,32位和64位

    Memcached的windows版本安装包,压缩包中有32位和64位两个版本,根据需要下载使用。 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取...

    Memcached1.4.13 For Windows 32/64

    这是 memcached 在 Windows 系统下的 x86/x64 版本。 命令提示符下运行 安装: memcached -d install memcached -d start net start "Memcached Server" 卸载: memcached -d stop memcached -d remove sc delete ...

    java-memcached-2.6.6.jar

    java-memcached-2.6.6.jar

    memcached for Win32/x64服务器(袋鼠图标,版本是1.4.13)

    MemCached For Win32 服务器(高洛峰老师讲课那种) p 监听的端口 l 连接的IP地址 默认是本机 d start 启动memcached服务 d restart 重起memcached服务 d stop|shutdown 关闭正在运行的memcached服务 d ...

    java_memcached-release_2.5.1

    Memcached Cache现在已经被大家广泛使用,但是千万不要认为对Cache的操作是低损耗的,要知道这类集中式Cache对Socket连接数(会牵涉到linux操作系统文件句柄可用数),带宽,网络IO都是有要求的,有要求就意味着会有...

Global site tag (gtag.js) - Google Analytics