不用第三方缓存框架的缓存超时清除问题

问题描述

现有设计:两层HashMap结构ClientKey---(CacheKey---XCache)每次取缓存的时候通过ClientKey和CacheKey找到对应的XCache对象。现在的设计是另外起一个轮询线程,为每个Client设置一个ClientActiveTime,为每个XCache设置一个CacheActiveTime。每隔一段时间检查当前时间减去ActiveTime是否大于超时时间,当然在扫描过程中是对这两层结构加锁的。如果Client超时,则所有的XCache清除,或序列化保存。如果XCache超时,则只清除当前的XCache对象,或序列化保存。因为XCache引用的对象不小,所以当用户很多的时候会造成系统缓慢,甚至OOM,现请教高手:1.有没有更好的设计来对XCache进行缓存?2.这种定时轮询的方式是不是合理,有没有别的方式进行检查?3.如果使用EHCache或者MemCache会在哪些方面带来优势(因为当前代码是可控的,用第三方的话不知道会不会带来其他问题。)望赐教,感谢!

解决方案

因为XCache引用的对象不小,所以当用户很多的时候会造成系统缓慢,甚至OOM,现请教高手:1.有没有更好的设计来对XCache进行缓存? 解决方案:1、LRU LFU 肯定要设置缓存的大小2、SoftReference 保证内存不足的情况垃圾回收2.这种定时轮询的方式是不是合理,有没有别的方式进行检查? 大家都是定时轮询3.如果使用EHCache或者MemCache会在哪些方面带来优势(因为当前代码是可控的,用第三方的话不知道会不会带来其他问题。) 框架的好处就是给你现成的更优良的解决方案,这样直接拿着用即可 用第三方的话不知道会不会带来其他问题:现在如ehcache都比较稳定了,没什么问题,因为开源如果需要看下源代码即可
解决方案二:
引用1.有没有更好的设计来对XCache进行缓存?感觉这个设计可以,在数据量不大的时候可以这么做。如果数据量太大,就会导致内存不够用了。引用2.这种定时轮询的方式是不是合理,有没有别的方式进行检查?其实还是一个问题,数据量大的话就会有问题,当然,也可以考虑类似memcached的管理模式:不轮询,只是等使用对象时在判断对象是否过期,如果不过期就返回,如果过期就删除。这样会造成内存浪费,如果数据量小的话可以考虑。还可以考虑两种方法的结合,这样轮询的频率就可以降低一些,比如一天一次,在凌晨没有什么用户的时候进行。引用3.如果使用EHCache或者MemCache会在哪些方面带来优势(因为当前代码是可控的,用第三方的话不知道会不会带来其他问题。) 使用外部缓存,可以带来很多好处,比如不用考虑内存管理,可以使用分布式缓存等等,至于稳定性应该不用担心,这些都是比较成熟的东西了。如果要用的话,当然需要研究一下了。

时间: 2024-09-20 04:23:00

不用第三方缓存框架的缓存超时清除问题的相关文章

.NET缓存框架CacheManager在混合式开发框架中的应用(1)-CacheManager的介绍和使用

在我们开发的很多分布式项目里面(如基于WCF服务.Web API服务方式),由于数据提供涉及到数据库的相关操作,如果客户端的并发数量超过一定的数量,那么数据库的请求处理则以爆发式增长,如果数据库服务器无法快速处理这些并发请求,那么将会增加客户端的请求时间,严重者可能导致数据库服务或者应用服务直接瘫痪.缓存方案就是为这个而诞生,随着缓存的引入,可以把数据库的IO耗时操作,转换为内存数据的快速响应操作,或者把整个页面缓存到缓存系统里面.缓存框架在各个平台里面都有很多的实现,基本上多数是采用分布式缓存

使用Memcached、Spring AOP构建数据库前端缓存框架

上回说到Memcahed的安装及java客户端的使用,现在我们使用memcached.Spring AOP技术来构建一个数据库的缓存框架. 数据库访问可能是很多网站的瓶颈.动不动就连接池耗尽.内存溢出等.前面已经讲到如果我们的网站是一个分布式的大型站点,那么使用memcached实现数据库的前端缓存是个很不错的选择:但如果网站本身足够小只有一个服务器,甚至是vps的那种,不推荐使用memcached,使用Hibernate或者Mybatis框架自带的缓存系统就行了. 一.开启memcached服

Yii框架分布式缓存的实现方案

声明:本文阅读对象最好是对Yii和分布式缓存有一定了解的人群,否则理解和掌握上有一些困难,建议阅读之前做好以上两点基础准备.   YiiFramework简称Yii,读作易,代表简单(easy).高效(efficient).可扩展(extensible),Yii将面向对象思想以及代码的重用性发挥到了极致,尤其是在缓存的支持上,Yii是最有效率的PHP框架之一. Yii的缓存支持封装在框架核心的caching文件夹下面,如下图是Yii支持的缓存存储介质.     如果要做跨Session和请求的分

Objective-C的缓存框架EGOCache在iOS App开发中的使用_IOS

EGOCache简介 EGOCache is a simple, thread-safe key value cache store. It has native support for NSString, UI/NSImage, and NSData, but can store anything that implements <NSCoding>. All cached items expire after the timeout, which by default, is one da

【hibernate框架】缓存机制之二级缓存

二级缓存是sessionFactory级别的缓存,可以跨越session存在. hibernate文档里关于二级缓存的说明: 二级缓存(The Second Level Cache) hibernate支持多种多样的二级缓存的实现,但hibernate本身并没有写二级缓存的实现(有一个是用来内部测试的,不要用于产品开发),而是由其他的厂商来提供. 表 21.1. 缓存策略提供商(Cache Providers) org.hibernate.cache.HashtableCacheProvider

写自己的缓存框架,JAD-CACHE架构设计篇

在之前一篇<写一个自己的通用缓存框架,以同时支持ehcache.mecache以及springcache注解等等>博文中,列出了自己的通用缓存框架需要实现在的大致功能总结如下: 1.提供统一的缓存操作api: 2.支持同时使用多种缓存实现: 3.提供灵活的配置: 4.需要防止缓存穿透: 5.需要可以灵活指定缓存存活时间: 6.需要任意控制缓存的停用或启用. 目前这个框架的编码部分已完成,并取名为JAD-CACHE,取这个名字的原因是因为它是我的个人的JAD项目的一部分,JAD项目是本人用业余时

MyBatis的一级缓存和二级缓存 以及 mybatis和ehcache缓存框架整合

查询缓存 缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. 基本由此图可以看出,我们在每一层都需要相应的缓存. mybatis持久层缓存 mybatis提供一级缓存和二级缓存 mybatis一级缓存是一个SqlSession级别,sqlsession只能访问自己的一级缓存的数据,二级缓存是跨sqlSession,是mapper级别的缓存,对于mapper级别的缓存不同的sql

JAVA 开源缓存框架

  JBossCache/TreeCache  JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让你轻松进行Jboss服务器之间的集群工作.JBossCache能够通过Jboss应用服务或其他J2EE容器来运行一个Mbean服务,当然,它也能独立运行. JBossCache包括两个模块:TreeCache和TreeCacheAOP. TreeCache --是一个树形结构复制的事务处理缓存. TreeCacheAOP --是一个"面向

请教一下C#有哪些缓存框架?

问题描述 最近做一个winform项目,里面有大量的数据字典记录.如果客户端每次请求,字典数据都从数据库里获取,这样效率上都有一定影响.能不能在服务端缓存这些数据,用到的时候直接从缓存里取.因为才转过来做C#,之前一直做java开发.对c#了解不是太多.请问一下c#有没有类似JAVA的ehcache这样的缓存框架?或者大家都用什么解决方案来进行缓存? 解决方案 解决方案二:一直都用redis,偶尔也用一些类似key-value结构的数据库解决方案三: 解决方案四:刚才找了看了ehcache一下,