EhCache 分布式缓存对象的同步

分类:  架构&性能 2012-09-03 22:27  1908人阅读  评论(8) 收藏  举报

为了提升目前开发产品的性能,项目组内考虑将一些常用的数据放入缓存,并且今后要将系统分布式部署,以达到负载均衡的目的,因此缓存同步问题就不得不需要考虑,该项目中主要用EhCache产品,EhCache的优势和劣势这里就不做介绍,网上可以搜索,单从这次项目出发,说说他在项目中的应用,Hibernate和Spring都集成了EhCache,如果您的项目中用到这两个框架,那将会大大降低开发复杂度,如果没有使用此类框架,Ehcache还提供在项目中独立使用。

先大概了解一下EhCache的原理吧,见下图:

主要为三层,最上层的是CacheManager,它是操作Ehcache的入口。我们可以通过CacheManager.getInstance()(还有别的方法,可查看API)获得一个单例的CacheManger;每个CacheManager都管理着多个Cache;而每个Cache都以Hash的方式,关联着多个 Element;Element则是我们用于存放要缓存对象的地方。

先从EhCache在项目中独立使用的Demo说起:

开发环境:Eclipse4.0(不受限制)、JDK1.5;

引用Jar包:ehcache-core-2.5.2.jar

                   junit-3.8.1.jar

                  slf4j-api-1.6.1.jar

                  slf4j-jdk14-1.6.1.jar

新建一个Java Project,引入以上jar包,创建一个测试类TestPutElement,代码如下:

[java]  view plain copy print ?
  1. package ehcache;  
  2.   
  3. import java.net.URL;  
  4. import test.User;  
  5.   
  6. import junit.framework.TestCase;  
  7. import net.sf.ehcache.Cache;  
  8. import net.sf.ehcache.CacheManager;  
  9. import net.sf.ehcache.Element;  
  10.   
  11. public class TestPutElement extends TestCase {  
  12.       
  13.     public void testPut() throws Exception {  
  14.           
  15.         URL url = TestPutCache.class.getClassLoader().getResource(  
  16.                 "conf/ehcache.xml");  
  17.         CacheManager manager = new CacheManager(url);  
  18.           
  19.         Cache cache = manager.getCache("metaCache");  
  20.   
  21.         User user = new User();  
  22.         user.setName("张三");  
  23.         Element element = new Element("key",user);  
  24.         cache.put(element);  
  25.   
  26.         manager.shutdown();  
  27.         System.out.println("已放入缓存!");  
  28.     }  
  29. }  
package ehcache;

import java.net.URL;
import test.User;

import junit.framework.TestCase;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

public class TestPutElement extends TestCase {
	
	public void testPut() throws Exception {
		
		URL url = TestPutCache.class.getClassLoader().getResource(
				"conf/ehcache.xml");
		CacheManager manager = new CacheManager(url);
		
		Cache cache = manager.getCache("metaCache");

		User user = new User();
		user.setName("张三");
		Element element = new Element("key",user);
		cache.put(element);

		manager.shutdown();
		System.out.println("已放入缓存!");
	}
}

创建一个POJO对象User,一定要经过序列化,并保证序列化UID的存在:

[java]  view plain copy print ?
  1. import java.io.Serializable;  
  2.   
  3. public class User implements Serializable {  
  4.   
  5.     private static final long serialVersionUID = -4402392412217726278L;  
  6.     private String name;  
  7.   
  8.     public String getName() {  
  9.         return name;  
  10.     }  
  11.   
  12.     public void setName(String name) {  
  13.         this.name = name;  
  14.     }  
  15. }  
import java.io.Serializable;

public class User implements Serializable {

	private static final long serialVersionUID = -4402392412217726278L;
	private String name;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
}

在ClassPath目录下加入ehcache.xml文件,这也可以在Ehcachejar包中找到,有两个注意事项,不要删除defaultcache,如果是两台不同的电脑,那么把cacheManagerPeerProviderFactory中的第二个localhost换成另一台机器IP即可,端口号是可以自定义的,不过要注意不要和系统使用的端口冲突,不然会报错;

[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.          xsi:noNamespaceSchemaLocation="ehcache.xsd"  
  5.          updateCheck="true" monitoring="autodetect"  
  6.          dynamicConfig="true">  
  7.   
  8.     <diskStore path="java.io.tmpdir" />  
  9.   
  10.     <!-- 指定除自身之外的网络群体中其他提供同步的主机列表,用“|”分开不同的主机 -->  
  11.     <cacheManagerPeerProviderFactory  
  12.         class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"  
  13.         properties="peerDiscovery=manual,rmiUrls=//localhost:40004/metaCache|//localhost:60000/metaCache" />  
  14.   
  15.     <!-- 配宿主主机配置监听程序,来发现其他主机发来的同步请求 -->  
  16.     <cacheManagerPeerListenerFactory  
  17.         class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"  
  18.         properties="port=40004,socketTimeoutMillis=120000" />  
  19.   
  20.     <!-- 默认缓存 -->  
  21.     <defaultCache maxElementsInMemory="10000" eternal="false"  
  22.         timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"  
  23.         diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"  
  24.         diskPersistent="false" diskExpiryThreadIntervalSeconds="120"  
  25.         memoryStoreEvictionPolicy="LRU">  
  26.     </defaultCache>  
  27.   
  28.     <!-- 缓存 -->  
  29.     <cache name="metaCache"   
  30.         maxElementsInMemory="1000"   
  31.         eternal="false"  
  32.         timeToIdleSeconds="2000"   
  33.         timeToLiveSeconds="1000"   
  34.         overflowToDisk="false">  
  35.         <cacheEventListenerFactory  
  36.             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />  
  37.         <!-- <bootstrapCacheLoaderFactory  
  38.             class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"  
  39.             properties="bootstrapAsynchronously=false" /> -->  
  40.     </cache>  
  41. </ehcache>  
<?xml version="1.0" encoding="UTF-8"?>

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd"
         updateCheck="true" monitoring="autodetect"
         dynamicConfig="true">

 	<diskStore path="java.io.tmpdir" />

	<!-- 指定除自身之外的网络群体中其他提供同步的主机列表,用“|”分开不同的主机 -->
	<cacheManagerPeerProviderFactory
		class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
		properties="peerDiscovery=manual,rmiUrls=//localhost:40004/metaCache|//localhost:60000/metaCache" />

	<!-- 配宿主主机配置监听程序,来发现其他主机发来的同步请求 -->
	<cacheManagerPeerListenerFactory
		class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
		properties="port=40004,socketTimeoutMillis=120000" />

	<!-- 默认缓存 -->
	<defaultCache maxElementsInMemory="10000" eternal="false"
		timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
		diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"
		diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
		memoryStoreEvictionPolicy="LRU">
	</defaultCache>

	<!-- 缓存 -->
	<cache name="metaCache" 
		maxElementsInMemory="1000" 
		eternal="false"
		timeToIdleSeconds="2000" 
		timeToLiveSeconds="1000" 
		overflowToDisk="false">
		<cacheEventListenerFactory
			class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />
		<!-- <bootstrapCacheLoaderFactory
			class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
			properties="bootstrapAsynchronously=false" /> -->
	</cache>
</ehcache>

到此为止,放入缓存,也就是发送端配置好了,下面开始创建另个Java Project(),User类不变,必须要注意的是序列化UID和上一个Java Project要一致,否则会报ClassNotFound的错误,下面是测试类:

[java]  view plain copy print ?
  1. package ehcache;  
  2.   
  3. import java.net.URL;  
  4.   
  5. import test.User;  
  6. import junit.framework.TestCase;  
  7. import net.sf.ehcache.Cache;  
  8. import net.sf.ehcache.CacheManager;  
  9. import net.sf.ehcache.Element;  
  10.   
  11. public class TestGetCache extends TestCase {  
  12.       
  13.     public void testGet() throws Exception {  
  14.         URL url = TestGetCache.class.getClassLoader().getResource(  
  15.                 "conf/ehcache.xml");  
  16.         CacheManager manager = new CacheManager(url);  
  17.           
  18.         Cache cache = manager.getCache("metaCache");  
  19.           
  20.         while (true) {  
  21.             System.out.println("搜索中...");  
  22.             System.out.println("当前资源数:" + cache.getSize());  
  23.             Element element = cache.get("key");  
  24.             if (element != null) {  
  25.                 User user = (User)element.getValue();  
  26.                 System.out.println(user.getName());  
  27.                 break;  
  28.             }  
  29.             Thread.sleep(1000);  
  30.         }  
  31.     }  
  32. }  
package ehcache;

import java.net.URL;

import test.User;
import junit.framework.TestCase;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

public class TestGetCache extends TestCase {
	
	public void testGet() throws Exception {
		URL url = TestGetCache.class.getClassLoader().getResource(
				"conf/ehcache.xml");
		CacheManager manager = new CacheManager(url);
		
		Cache cache = manager.getCache("metaCache");
		
		while (true) {
			System.out.println("搜索中...");
			System.out.println("当前资源数:" + cache.getSize());
			Element element = cache.get("key");
			if (element != null) {
				User user = (User)element.getValue();
				System.out.println(user.getName());
				break;
			}
			Thread.sleep(1000);
		}
	}
}
ehcache.xml配置文件如下:
[html]  view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.          xsi:noNamespaceSchemaLocation="ehcache.xsd"  
  5.          updateCheck="true" monitoring="autodetect"  
  6.          dynamicConfig="true">  
  7.   
  8.     <diskStore path="java.io.tmpdir" />  
  9.   
  10.     <!-- 指定除自身之外的网络群体中其他提供同步的主机列表,用“|”分开不同的主机 -->  
  11.     <cacheManagerPeerProviderFactory  
  12.         class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"  
  13.         properties="peerDiscovery=manual,rmiUrls=//localhost:40004/metaCache|//localhost:60000/metaCache" />  
  14.   
  15.     <!-- 配宿主主机配置监听程序,来发现其他主机发来的同步请求 -->  
  16.     <cacheManagerPeerListenerFactory  
  17.         class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"  
  18.         properties="port=40004,socketTimeoutMillis=120000" />  
  19.   
  20.     <!-- 默认缓存 -->  
  21.     <defaultCache maxElementsInMemory="10000" eternal="false"  
  22.         timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"  
  23.         diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"  
  24.         diskPersistent="false" diskExpiryThreadIntervalSeconds="120"  
  25.         memoryStoreEvictionPolicy="LRU">  
  26.     </defaultCache>  
  27.   
  28.     <!-- 缓存 -->  
  29.     <cache name="metaCache"   
  30.         maxElementsInMemory="1000"   
  31.         eternal="false"  
  32.         timeToIdleSeconds="2000"   
  33.         timeToLiveSeconds="1000"   
  34.         overflowToDisk="false">  
  35.         <cacheEventListenerFactory  
  36.             class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />  
  37. <!--         <bootstrapCacheLoaderFactory  
  38.             class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"  
  39.             properties="bootstrapAsynchronously=true" /> -->  
  40.     </cache>  
  41. </ehcache>  
<?xml version="1.0" encoding="UTF-8"?>

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd"
         updateCheck="true" monitoring="autodetect"
         dynamicConfig="true">

 	<diskStore path="java.io.tmpdir" />

	<!-- 指定除自身之外的网络群体中其他提供同步的主机列表,用“|”分开不同的主机 -->
	<cacheManagerPeerProviderFactory
		class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
		properties="peerDiscovery=manual,rmiUrls=//localhost:40004/metaCache|//localhost:60000/metaCache" />

	<!-- 配宿主主机配置监听程序,来发现其他主机发来的同步请求 -->
	<cacheManagerPeerListenerFactory
		class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
		properties="port=40004,socketTimeoutMillis=120000" />

	<!-- 默认缓存 -->
	<defaultCache maxElementsInMemory="10000" eternal="false"
		timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"
		diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"
		diskPersistent="false" diskExpiryThreadIntervalSeconds="120"
		memoryStoreEvictionPolicy="LRU">
	</defaultCache>

	<!-- 缓存 -->
	<cache name="metaCache" 
		maxElementsInMemory="1000" 
		eternal="false"
		timeToIdleSeconds="2000" 
		timeToLiveSeconds="1000" 
		overflowToDisk="false">
		<cacheEventListenerFactory
			class="net.sf.ehcache.distribution.RMICacheReplicatorFactory" />
<!--  		<bootstrapCacheLoaderFactory
			class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
			properties="bootstrapAsynchronously=true" /> -->
	</cache>
</ehcache>
下面就可以测试了,首先运行后一个java Project项目 ,然后运行前一个java Project,运行结果为:1,张三。

 

OpenMMLab实战指南:从环境搭建到首个检测模型运行 本文是一份详细的OpenMMLab实战指南,重点介绍了如何从零开始搭建环境并运行首个目标检测模型。内容涵盖Miniconda环境配置、PyTorch与CUDA版本匹配、使用MIM工具安装MMCV和MMDetection的核心步骤,并通过RTMDet-tiny模型演示了完整的推理流程,帮助开发者高效入门这一计算机视觉开源算法体系。 阅读详情

相关推荐

ENSP从下载到运行:用虚拟机搭建华为认证实验环境全流程(含USG6000V镜像配置)

本文提供了一份详细的华为ENSP仿真平台从下载、安装到配置USG6000V防火墙镜像的完整指南。内容涵盖前置软件安装、ENSP主程序配置、核心设备镜像导入及虚拟机资源分配策略,旨在帮助网络工程师和学习者快速搭建一个稳定、功能齐全的华为认证实验环境,为备考和模拟企业网络部署打下坚实基础。

weixin_29230865的博客 535

分布式情况下本地缓存同步方案

两级缓存数据数据不一致性问题 伪代码: @Scheduled(cron = "0 0/3 * * * ? ") public void cacheRoom() { Long start = System.currentTimeMillis(); log.info("Cache room data, execute start :{}", start); RLock lock = redissonClusterClient.getLock(Lo

weixin_43831204的博客 4533

FDTD脚本教程——结构的创建

文章目录结构的搭建创建长方体创建柱体多边形柱体(椭)圆柱体圆环柱自定义形状创建surface波导球棱锥 在lumerical中,可以使用脚本进行操作,可在右侧脚本编辑器运行,或者直接在下方shell输入。 结构的搭建 创建长方体 um = 1e-6; nm = 1e-7; addrect; set("name","myRect"); set("material","SiO2 (Glass) - Palik"); set("render type","wireframe"); # 默认是细节渲染,也就是det

战斗果冻的训练中心 2万+

Redis分布式缓存(二)| 主从架构搭建、全量/增量同步原理、主从同步优化

Redis主从架构 1.搭建主从架构 1.1.集群结构 1.2.准备实例和配置 1.3.启动 1.4.停止 1.5.开启主从关系 1.6.测试 2.主从数据同步原理 2.1.全量同步 2.2.增量同步 2.3.repl_backlog原理 3.主从同步优化

慌途L 1944

故障处理:Oracle一体机磁盘故障时磁盘组重平衡失败的故障处理

摘要: Oracle Exadata一体机出现磁盘故障案例,存储节点故障灯未亮但磁盘已产生大量坏块,导致重平衡失败。文章强调了一体机硬件巡检需检查6个关键维度:节点messages日志、存储cell告警日志、CellCLI日志、ASM告警日志、ILOM日志及服务器信号灯。故障分析显示硬盘物理故障导致磁盘组冗余受损,自动修复流程受阻。文中详细记录了通过CellCLI工具排查损坏磁盘的过程,并提供了完整的故障处理流程和命令输出。文章同步发布于微信公众号"IT民工的龙马人生"和博客网站(www

提供数据库技术支持(系统优化,故障处理,安装升级,数据恢复等) 1231

Ubuntu 22.04下Nvidia显卡驱动安装全攻略:从PPA源到避坑指南

本文详细介绍了在Ubuntu 22.04系统下安装Nvidia显卡驱动的完整流程,包括PPA源的使用、旧驱动清理、安装后验证及常见问题解决方案。特别针对机器学习开发者和图形设计师,提供了从基础安装到性能调优的全方位指南,帮助用户避免常见安装陷阱并优化GPU性能。

weixin_29213655的博客 382

EhCache 分布式下缓存对象的同步

为了提升目前开发产品的性能,项目组内考虑将一些常用的数据放入缓存,并且今后要将系统分布式部署,以达到负载均衡的目的,因此缓存同步问题就不得不需要考虑,该项目中主要用EhCache产品,EhCache的优势和劣势这里就不做介绍,网上可以搜索,单从这次项目出发,说说他在项目中的应用,Hibernate和Spring都集成了EhCache,如果您的项目中用到这两个框架,那将会大大降低开发复杂度,如果没有

u014386474的博客 511

Python 领域 vllm 知识蒸馏的实践经验

知识蒸馏(Knowledge Distillation)是一种将大型、复杂模型(教师模型)的知识转移到小型、高效模型(学生模型)的技术。在大型语言模型(LLM)时代,这项技术变得尤为重要,因为它可以在保持模型性能的同时显著降低计算资源需求。本文专注于在Python生态中使用vLLM(Very Large Language Model)框架实现知识蒸馏的实践经验。vLLM是一个专为大型语言模型设计的高效推理和服务框架,它通过创新的注意力机制和内存管理技术,显著提高了LLM的推理速度。

AI Python 编程之道的博客 777

分布式缓存

分布式缓存 1、什么是分布式缓存? 在高并发的环境下,大量的I/O处理与CPU的处理速度显然不在同一个数量级,从减轻数据库的压力和提高系统的响应速度两个角度来考虑,因而都会在数据库之前加一层缓存。由于单机的内存资源和承载能力有限,因而可以采用多台服务器来用作缓存,使得多台缓存服务器形同一台,并且不会造成数据重复存放的情况。 2、分布式缓存的好处? 使用分布式缓存,可以在高并发的环境下,

qq_25605779的专栏 847

运维系列【仅供参考】: Windos10和Windos11 配置intel网卡vlan的方法

Windos10和Windos11 配置intel网卡vlan的方法

weixin_54626591的博客 477

5、自适应 RBF 神经网络控制方法解析

本文详细解析了基于RBF神经网络的多种自适应控制方法,包括针对函数未知、参数未知以及存在外部干扰的非线性系统的控制策略。通过李雅普诺夫稳定性理论设计自适应律,确保闭环系统稳定,并结合仿真示例和MATLAB代码实现,展示了方法的有效性。文章还对比了不同控制方法的适用场景,并给出了实际应用流程,为复杂系统控制提供了系统性解决方案。

ol789012的博客 72

如何实现RPC分布式服务的缓存集成和同步

1.背景介绍 1. 背景介绍 随着分布式系统的发展,RPC(Remote Procedure Call,远程过程调用)技术成为了分布式服务之间的主要通信方式。RPC 可以让程序员像调用本地函数一样调用远程服务,大大提高了开发效率和系统性能。然而,RPC 分布式服务之间的通信和数据处理存在一定的延迟和同步问题,这需要在系统设计和实现阶段进行有效解决。 在分布式系统中,缓存技术是提高系统性能和减...

AI天才研究院 1128

OmniBox2.0.X版本 一站式影视订阅与多端播放平台文档

OmniBox 是一站式影视订阅与多端播放平台:你可以用 JS 或 Python 按 OmniBox 规范自建爬虫源,在后台把多个爬虫源自由组合成订阅,然后在网页、手机、电视等全平台的客户端里使用。只要客户端支持 TVBox、猫源、UZ、Emby 等协议,即可无缝对接。同时支持电视直播源、六大平台直播间和网盘源视频在线观看,通过 Docker 一键部署。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1920

EhCache 分布式缓存对象的同步

为了提升目前开发产品的性能,项目组内考虑将一些常用的数据放入缓存,并且今后要将系统分布式部署,以达到负载均衡的目的,因此缓存同步问题就不得不需要考虑,该项目中主要用EhCache产品,EhCache的优势和劣势这里就不做介绍,网上可以搜索,单从这次项目出发,说说他在项目中的应用,Hibernate和Spring都集成了EhCache,如果您的项目中用到这两个框架,那将会大大降低开发复杂度,如果没有

袁伏彪 —— 共享,共赢 1万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

分布式缓存(二)

分布式缓存:EHcache、Memcached、Redis等缓存框架,主要的特点是什么?分别适用于哪些业务场景? EHcache:是java 平台上比较优秀的缓存框架,是从hibernate的缓存开始被广泛使用起来的。数据可以伸缩到数G字节,节点可以到数百个,提供了对JSR107 JCACHE API最完整的实现。节点发现,冗余器和监听器都可以插件化。同时,提供了许多对缓存事件发生...

weixin_30535843的博客 193

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

EhCache 分布式缓存/缓存集群

开发环境: System:Windows JavaEE Server:tomcat5.0.2.8、tomcat6 JavaSDK: jdk6+ IDE:eclipse、MyEclipse 6.6   开发依赖库: JDK6、 JavaEE5、ehcache-core-2.5.2.jar Email:hoojo_@126.com Blog:htt

答案是肯定的 687

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

分布式

服务器分布式 同一个域名指向不同的ip,比如联通、电信、移动各布一台服务器,电信的用户就指南电信那台服务器。 静态文件 静态文件用cdn加速。 tomcat session分布式(传统的) tomcat-redis-session-manager https://github.com/bsr1983/tomcat-redis-session-manager 利用tomca...

weixin_30409849的博客 90

分布式Ehcache缓存配置-RMI

分布式EHCACHE系统在缓存同步上存在着不小的缺陷 ehcache 集群使用 rmi方式 有图有真想 讲一下背景,两台服务器,pc跟移动端,一个数据库,在pc服务器上,用了Hibernate的二级缓存,但是最近老是报错,pc端删除了数据,移动端没有及时更新缓存,导致报 nested exception is org.hibernate.ObjectNotFoundExc

guin_guo的博客 3681

Java缓存组件EhCache

系统缓存是位于 应用程序与wuli

fanyun7654的专栏 944

Ehcache的介绍

1.Overview Ehcache从 Hibernate 发展而来,逐渐涵盖了Cahce界的全部功能,是目前发展势头最好的一个项目。 标准缓存 分布式缓存(基于RMI/JGroups/JMS) URL,页面片段缓存(类似OSCache的相关部分) 中央缓存服务器(类似

晓夜璨丰 415

缓存技术之Ehcache(2)究竟什么时候可以使用Ehcache缓存

Ehcache是什么    EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力。 Ehcache的使用场景是什么 1、首先最主要就是页面缓存。 网站页面的数据来源非常广泛的,大多数来自不同的对象,而且有可能来自不同的db,所以给页面做缓存是一个不错的主意。 2、常用数据的缓存

leo 1928

EHCache的使用

在开发高并发量,高性能的网站应用系统时,缓存Cache起到了非常重要的作用。本文主要介绍EHCache的使用,以及使用EHCache的实践经验。 笔者使用过多种基于Java的开源Cache组件,其中包括OSCache、JBossCache、EHCache。OSCache功能强大,使用灵活,可用于对象缓存、Filter缓存以及在JSP中直接使用cache标签。笔者在最近的使用过程中发现,在并发量较

00's Blog 412

EHCache的使用教程

开发高并发量,高性能的网站应用系统时,缓存Cache起到了非常重要的作用。本文主要介绍EHCache的使用,以及使用EHCache的实践经验。 笔 者使用过多种基于Java的开源Cache组件,其中包括OSCache、JBossCache、EHCache。OSCache功能强大,使用灵活,可 用于对象缓存、Filter缓存以及在JSP中直接使用cache标签。笔者在最近的使用过程中发现,在并发量

smile_园少 2046

使用Hibernate 二级缓存

Hibernate 拥有一级和二级缓存,一级缓存是Session 实现的,天生拥有并且不可拆卸 。Hibernate 使用插件的方式实现二级缓存,默认情况下,二级缓存是关闭的。合理地使用二级缓存可以有效减少对数据库访问的次数,提升应用的整体性能。 对于一个版块Board 对象来说,其实例数目比较少且不常发生更改,User 对象的实例 数目比较多,但也不经常发生变化。而Topic 和Post

大苯熊-我的书房 1928

Java Cache 的HashMap实现, 适用场景及分布式ehcache实例

  cache是老生常谈的事情,这里我想强调一下KISS原则,就是keep it simple and stupid。最近看到很多场景下cache使用的不适当,特别是被过度使用了。一个简单键值存储并不需要复杂的cache方案,好的方案就是用最简单的方法解决问题。简洁是美!   一个标准Cache的主要特征是: 过期时间        容量规划(重要) 清除策略(重要) 命中率统计  ...

移动互联网后端技术 429
上一篇: jdbc取得插入记录的主键值
下一篇: Maven使用说明
helloman0908
博客等级 码龄16年 1粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值