论坛首页 Java企业应用论坛

分页查询总行数缓存策略

浏览 8826 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-11-04  
prowl 写道
1,楼主提到了高并发,应该看下com.java.util.concurrent包下的ConcurrentHashMap

ConcurrentHashMap并没有所谓非常高的性能,如果想看,建议看oscache吧。顺便提一下,包名多了个com
prowl 写道

2,单纯靠判断时间来对缓存进行删除操作我觉得不太科学,是否可以加一个计数器?在使用频率最少和时间之间做判决。
现在绝大多数cache的算法都是采用最近最少使用的,只是一些算法增加了当不使用超过一段时间后,也淘汰的补充行为(即使cache的空间是足够的)
prowl 写道

3,是否可以扩展一下让这个缓存应用到不同的场景,比如存取可能是一些实际的对象,或者删除之后是否可简单持久化到文件,下次读取文件的一些关键信息。(有一些操作很占内存不一定是DAO,比如一些文件的解析)
你说的这个就类似于EJB中bean的钝化和激活了,这种行为并不是cache,更多地像池的行为。对于cache,如果删除了,你又如何从文件中读取? 当然,现在许多的cache实现都支持内存cache和临时的持久性cache(转储于硬盘或数据库,减少对内存的需求)。
prowl 写道

4,维护多个有关联的Map的时候是否需要加入事务处理。
事务是数据库的概念了,基本上没有简单办法去实现内存对象的事务(能做出一个事务机制,就相当威猛了,远远超出了cache及cache应用的层次)。
0 请登录后投票
   发表时间:2009-11-04  
yirentianran 写道
既然是高并发,那是否应该考虑同步机制?

有效和高效的同步控制,是cache性能优劣的一个重要评判标准的。
0 请登录后投票
   发表时间:2009-11-05  
凤舞凰扬 写道
prowl 写道
1,楼主提到了高并发,应该看下com.java.util.concurrent包下的ConcurrentHashMap

ConcurrentHashMap并没有所谓非常高的性能,如果想看,建议看oscache吧。顺便提一下,包名多了个com
prowl 写道

2,单纯靠判断时间来对缓存进行删除操作我觉得不太科学,是否可以加一个计数器?在使用频率最少和时间之间做判决。
现在绝大多数cache的算法都是采用最近最少使用的,只是一些算法增加了当不使用超过一段时间后,也淘汰的补充行为(即使cache的空间是足够的)
prowl 写道

3,是否可以扩展一下让这个缓存应用到不同的场景,比如存取可能是一些实际的对象,或者删除之后是否可简单持久化到文件,下次读取文件的一些关键信息。(有一些操作很占内存不一定是DAO,比如一些文件的解析)
你说的这个就类似于EJB中bean的钝化和激活了,这种行为并不是cache,更多地像池的行为。对于cache,如果删除了,你又如何从文件中读取? 当然,现在许多的cache实现都支持内存cache和临时的持久性cache(转储于硬盘或数据库,减少对内存的需求)。
prowl 写道

4,维护多个有关联的Map的时候是否需要加入事务处理。
事务是数据库的概念了,基本上没有简单办法去实现内存对象的事务(能做出一个事务机制,就相当威猛了,远远超出了cache及cache应用的层次)。


有关第三点,对于频繁耗时的数据库操作,或者一些文件的解析,往往得到一些有用的信息要用上更长的时间,在源更新不频繁的情况下,有效对已经提取的有用信息进行持久化,再次访问直接读取信息文件,能显著的提高效率。这只是一个扩展,也不太同于池的概念。

第四,有时会遇到一些缓存之间是相互关联的,比如同时保存了2个Map,其中一个Map里的数据在更新或者获取的时候出现了异常,那这条有关联的数据其实是无效的。可以加一些简单的事务控制。

其实这只是我在项目中遇到的问题,及我的解决办法,有时间一定看以下oscache,多谢推荐。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics