在Java中,不同的类都有自己单独的Cache机制,实现的方法也可能有所不同,常见的各类Cache机制有:OSCache、JSC(Java Caching System)、EHCache、JCache、ShiftOne、SwarmCache、JBossCache等等。
所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例。这样做可以减少系统开销,提高系统效率。
缓存主要可分为二大类:
1:通过文件缓存
是指把数据存储在磁盘上,不管你是以XML格式,序列化文件DAT格式还是其它文件格式
2:内存缓存
就是实现一个类中静态Map,对这个Map进行常规的增删查
1:涉及到处理高并发请求,且需要及时响应的
2:加快系统响应速度时
有些兄弟,在使用缓存的时候,在session和cache之间犹豫不定,不知使用哪个好,反正都可以存贮数据和读取数据,在这里简单提一下,有助于更好地选择使用。
session
1:数据存放于servletContext中:
2:没有容量大小的限制,如果一直存储,知道内存耗光
3:无用数据需要靠定义的缓存时间来判断数据是否有效:
4:sessin的数据只存在于一次会话中,会话消失,数据即丢失:
5:session不稳定,数据易丢失。
cache
1:是一个容器,这个容器是存放于servletContext中
2:所占内存空间大小是可以控制的,
3:按照自己的算法,可定时更新、清除数据,释放内存空间
4:是单机线程,可扩展多台服务器存储
5:靠定义的缓存时间来控制数据,会话结束,缓存时间未过期,数据会一直存在
6:稳定,数据不易丢失
今天,我们以Ehcache为例,讲解下cache的使用(集成spring),最原始的初始化map的使用方法,自行某度即可,网上很多源代码,也可以右下角留言小编获取源码。
EHCache是一个纯Java的在进程中的缓存,具有速度快、简单、可扩展、轻量级、缓存监听器等特点,在java项目广泛的使用。它是一个开源的、设计于提高在数据从RDBMS中取出来的高花费、高延迟采取的一种缓存方案。正因为Ehcache具有健壮性(基于java开发)、被认证(具有apache2.0 license)、充满特色,所以被用于大型复杂分布式web application的各个节点中。
开发集成步骤:
1:配置 applicationContext-ehcache.xml 文件(支持注解)
2:配置 ehcache.xml 文件
3:将 applicationContext-ehcache.xml 引用到spring配置文件中
4:java代码中引用注解缓存即可
详细代码:
缓存注解有以下三个:
1:@Cacheable
当调用这个方法的时候,会从一个名叫 baseCache的缓存中查询,如果没有,则执行实际的方法(即查询数据库),并将执行的结果存入缓存中,否则返回缓存中的对象。这里的缓存中的 key 就是参数 userName,value 就是 user对象。“baseCache”缓存是在 ehcache.xml 中定义的名称
2:@CacheEvict
注释来标记要清空缓存的方法,当这个方法被调用后,即会清空缓存,前面的 # 号代表这是一个 SpEL 表达式,此表达式可以遍历方法的参数对象,具体语法可以参考 Spring 的相关文档手册
3:@CachePut
确保方法被执行,同时方法的返回值也被记录到缓存中,实现缓存与数据库的同步更新
示例:
// 更新baseCache缓存
@CacheEvict(value="baseCache",key="#user.getName()")
// 加入baseCache缓存
@Cacheable(value="baseCache",condition="#userName.length() <=4")
// 更新baseCache缓存
@CachePut(value="baseCache",key="#account.getName()")