0 0

关于ehcache处理大数据的问题3

我运行后,出现如下错误:
2012-4-20 11:51:43 net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask call
严重: Disk Write of 4 failed:
java.io.NotSerializableException: java.util.RandomAccessSubList
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source)
at net.sf.ehcache.Element.writeObject(Element.java:797)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at net.sf.ehcache.util.MemoryEfficientByteArrayOutputStream.serialize(MemoryEfficientByteArrayOutputStream.java:97)
at net.sf.ehcache.store.disk.DiskStorageFactory.serializeElement(DiskStorageFactory.java:413)
at net.sf.ehcache.store.disk.DiskStorageFactory.write(DiskStorageFactory.java:392)
at net.sf.ehcache.store.disk.DiskStorageFactory$DiskWriteTask.call(DiskStorageFactory.java:493)
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1154)
at net.sf.ehcache.store.disk.DiskStorageFactory$PersistentDiskWriteTask.call(DiskStorageFactory.java:1138)
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


相关的cache管理类代码如下:
其中licensesCache中存放的数据中value为List<String>类型,其余的两个cache为String类型。
上面那个错误什么原因啊,如何改正?谢谢啦~

package com.traffic.cache;

import java.util.List;
import java.util.Timer;

import com.traffic.protocol.LicenseProtocol;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;

public class LicenseCacheManager {

	private static CacheManager cacheManager = null;
	private static Cache blackListCache = null;	
	private static Cache whiteListCache = null;
	private static Cache licensesCache = null;	
	private static Timer timer = null;

	static {
		
		cacheManager = CacheManager.create("src/config/ehcache.xml");
		cacheManager.addCache("blackListCache");
		cacheManager.addCache("whiteListCache");
		cacheManager.addCache("licensesCache");
		licensesCache = cacheManager.getCache("licensesCache");
		blackListCache = cacheManager.getCache("blackListCache");
		whiteListCache = cacheManager.getCache("whiteListCache");
		// 启动定时器,每隔30分钟执行清理缓存任务
		timer = new Timer();
		timer.scheduleAtFixedRate(new ClearCacheTask(), 300000, 300000);
	}
	
	public static void addLicense(int number, List<String> licenses){
		licensesCache.put(new Element(number, licenses));
	}
	
	public static List<String> getLicenses(int number) {
		Element e = licensesCache.removeAndReturnElement(number);
		List<String> l =(List<String>)e.getObjectValue();
		
		return l;
	}
	
	public static boolean haveLicenses() {
		if(licensesCache.getSize() == 0) {
			return false;
		}
		return true;
	}
	
	public static void  addBlackList(String license) {
		Element e = new Element(license, "blackList");
		blackListCache.put(e);
	}
	
	public  static void addWhiteList(String license) {
		Element e = new Element(license, "whiteList");
		whiteListCache.put(e);
	}
	// 根据type制定的类型,添加到相应的cache
	public static void addItem(String type, String license) {
		if(type.equals(LicenseProtocol.WhiteLicenseType)) {
			addWhiteList(license);
		} else if(type.equals(LicenseProtocol.BlackLicenseType)){
			addBlackList(license);
		}
	}
	
	public static boolean isInBlackList(String license) {
		if(blackListCache.isElementInMemory(license)) {
			return true;
		}
		return false;
	}

	public static boolean isInWhiteList(String license) {
		if(whiteListCache.isElementInMemory(license)) {
			return true;
		}
		return false;
	}
	
	public static Cache getBlackListCache() {
		return blackListCache;
	}

	public static Cache getWhiteListCache() {
		return whiteListCache;
	}

	public static CacheManager getCacheManager() {
		return cacheManager;
	}

	public static void clear() {
		blackListCache.removeAll();
		whiteListCache.removeAll();
	}
	
	public static void closeManager() {
		timer.cancel();
		blackListCache.dispose();
		whiteListCache.dispose();
		cacheManager.shutdown();		
	}
}


ehcache的配置文件为:
<?xml version="1.0" encoding="UTF-8"?>
 <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:noNamespaceSchemaLocation="ehcache.xsd">
	<diskStore path="D:/cache" />
	<defaultCache 
		maxElementsInMemory="10000"
		maxElementsOnDisk="1000" 
		eternal="false" 
		overflowToDisk="true"
		timeToIdleSeconds="300" 
		timeToLiveSeconds="600" 
		maxEntriesLocalHeap="10000"
		maxEntriesLocalDisk="10000000" 
	/>
 </ehcache>

2012年4月20日 11:56

1个答案 按时间排序 按投票排序

0 0

采纳的答案

加diskPersistent="true"试试

2012年4月20日 12:38

相关推荐

    ehcache 介绍

    - **内存与磁盘存储**: Ehcache 支持内存和磁盘两种存储方式,能够轻松地扩展到数 GB 的规模,针对大数据进行了优化。 - **高并发与多 CPU 支持**: 它针对高并发和多 CPU 系统进行了优化,能够支持数百 GB 的吞吐量...

    5.0大数据高并发-集群覆盖均衡1

    总的来说,处理大数据高并发,我们需要综合运用分布式系统、缓存优化、负载均衡和数据覆盖均衡等技术,构建出高效、稳定的系统架构。这不仅要求对各种工具和策略有深入理解,还须具备良好的系统设计和调优能力。

    java千万级别数据处理.doc

    7. **框架选择**:虽然原始问题没有使用特定的框架,但在处理大数据时,可以考虑使用Hadoop、Spark或Flink等大数据处理框架,它们设计用于处理大规模数据,并提供分布式计算能力。 通过这些策略,我们可以有效地...

    Java实现Dbhelper支持大数据增删改

    Dbhelper 类的设计目的就是为了解决这一问题,它提供了一种封装的数据库操作方式,允许开发者更便捷地处理大数据操作。下面将详细阐述Dbhelper类的关键实现和优化策略。 首先,Dbhelper类的核心功能在于执行SQL语句...

    java数据批量处理

    在Java编程领域,数据批量处理是一项常见的任务,尤其在大数据、数据库操作以及系统集成等场景中,批量处理能显著提高效率并减少资源消耗。本文将深入探讨Java如何进行数据批量处理,涉及的主要知识点包括批量读取、...

    Java开发者必备10大数据工具和框架

    6. **Ehcache** - Ehcache是一款广泛使用的Java分布式缓存,常用于Java EE和轻量级容器环境。它可以提高应用程序性能,通过缓存热点数据减少数据库访问压力,支持缓存的持久化和集群配置。 除此之外,还有其他几个...

    java数据处理代码

    在Java编程语言中,数据处理是一项核心任务,尤其在大数据时代,高效的数据处理能力是软件系统的关键竞争力。这个压缩包中的“java数据处理代码”很可能包含了一系列用于处理和分析数据的示例程序,可能涵盖了数据...

    包含Redis,memcache,encache的NoSQL入门

    NoSQL(Not Only SQL)是一种非关系型数据库技术,它在大数据、高并发场景下表现出色,具有灵活性、可扩展性和...在实践中不断探索,你会发现NoSQL数据库在解决现代互联网应用中的大数据问题时,拥有巨大的潜力和价值。

    java源码:通用数据底层 Jsa4j.zip

    6. 分页和查询:在处理大数据时,分页查询是必不可少的。Jsa4j可能包含高效的分页算法和动态SQL生成,以满足复杂条件的查询需求。 7. 日志记录和异常处理:为了方便问题排查和系统监控,Jsa4j会包含日志记录模块,...

    缓存 队列 kettle

    在处理大数据时,Kettle利用工作流和作业的概念,将数据处理任务分解为一系列步骤,每个步骤之间可以设置条件和分支,以适应各种业务逻辑。此外,Kettle还提供了缓存功能,可以在内存中存储部分数据,提高处理速度。...

    JAVA多用户B2B2C商城系统源码

    使用Spring+JPA+Velocity+Ehcache作为基础开发架构,...系统支持多服务器分布式部署,互通机制,也可以修改系统相关功能进行session缓存共享处理,轻松完成分布式部署,为大数据、大访问量的运营商提供可靠的功能保证。

    基于内存的分布式计算架构.pdf

    【基于内存的分布式计算架构】是一种为了解决大数据处理中性能和存储问题的创新解决方案。在传统的基于硬盘的计算架构中,数据读写速度慢,特别是在处理大量实时数据时,如日活跃用户(日活)的计算。对于移动运营...

    解析构建高性能J2EE应用的5种核心策略

    构建高性能的J2EE应用程序是IT领域中的关键挑战之一,特别是在当今云计算和大数据时代,对系统性能和可扩展性的需求日益增长。以下是五个核心策略,它们可以帮助开发者在J2EE平台上实现这一目标。 首先,缓存...

    基于Redis的UniEAP缓存实现

    然而,随着大数据时代的到来,Ehcache在处理高并发、大规模数据时可能面临性能瓶颈。这时,分布式缓存如Redis因其高性能、高可用性而备受青睐。Redis 是一个开源的键值存储系统,特别适合于处理大量数据的高速访问...

    基于spark、mahout和spring boot构建的智能推荐系统.zip

    本项目以Spring Boot为核心框架,结合Spark大数据处理能力和Mahout机器学习库,构建了一个高效且可扩展的推荐系统。 一、Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,旨在简化Spring应用的初始搭建...

    likejd:Shopping商城系统是采用Java语言开发的多用户商城系统,使用Spring + JPA + Velocity + Ehcache作为基础开发架构,应用SpringSecurity框架管理系统权限,结合URL合并技术静态化商城前台页面。商贸开发经验及主流电商的功能特点,针对系统易用性,功能性,扩展性,充分考虑大数据,大并发,系统安全,SEO功能,使系统设计更加完善,更加高效稳定。当前主流B2B2C,C2C购物平台主要功能,同时推出自身特色功能,例如:商城广告,商城活动,积分商城等

    该系统充分利用了Java的强大特性和一系列成熟的技术框架,以确保系统的易用性、功能性、扩展性,同时考虑到了在大数据、高并发环境下的性能和安全性,以及搜索引擎优化(SEO)的需求。 首先,系统采用了Spring框架...

    基于SpringBoot的next主题个人博客系统

    为提升系统性能和用户体验,项目使用了EhCache实现缓存管理,加快数据访问速度;通过集成阿里巴巴的Druid数据库连接池,有效监控和管理数据库连接。同时,项目支持多种对象存储方式,包括腾讯云COS和七牛云存储,...

Global site tag (gtag.js) - Google Analytics