java中什么时候会产生缓存 什么是java中的"缓存"
大家好,今天来为大家分享java中什么时候会产生缓存的一些知识点,和什么是java中的"缓存"的问题解析,大家要是都明白,那么可以忽略,如果不太清楚的话可以看看本篇文章,相信很大概率可以解决您的问题,接下来我们就一起来看看吧!
Java本地缓存有哪些
下面给你介绍几个常见的java缓存框架:
1、OSCache
OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。
OSCache有以下特点:
缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。
拥有全面的API--OSCache API给你全面的程序来控制所有的OSCache特性。
永久缓存--缓存能随意的写入硬盘,因此允许昂贵的创建(expensive-to-create)数据来保持缓存,甚至能让应用重启。
支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。
缓存记录的过期--你可以有最大限度的控制缓存对象的过期,包括可插入式的刷新策略(如果默认性能不需要时)。
2、Java Caching System
JSC(Java Caching System)是一个用分布式的缓存系统,是基于服务器的java应用程序。它是通过提供管理各种动态缓存数据来加速动态web应用。
JCS和其他缓存系统一样,也是一个用于高速读取,低速写入的应用程序。
动态内容和报表系统能够获得更好的性能。
如果一个网站,有重复的网站结构,使用间歇性更新方式的数据库(而不是连续不断的更新数据库),被重复搜索出相同结果的,就能够通过执行缓存方式改进其性能和伸缩性。
3、EHCache
EHCache是一个纯java的在进程中的缓存,它具有以下特性:快速,简单,为Hibernate2.1充当可插入的缓存,最小的依赖性,全面的文档和测试。
4、JCache
JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上。
5、ShiftOne
ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架。
6、SwarmCache
SwarmCache是一个简单且有效的分布式缓存,它使用IP multicast与同一个局域网的其他主机进行通讯,是特别为集群和数据驱动web应用程序而设计的。SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。
SwarmCache使用JavaGroups来管理从属关系和分布式缓存的通讯。
java实现缓存技术(java缓存机制)
1、TreeCache/JBossCache
JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能。缓存数据被自动复制,让你轻松进行JBoss服务器之间的集群工作。JBossCache能够通过JBoss应用服务或其他J2EE容器来运行一个MBean服务,当然,它也能独立运行。
2、WhirlyCache
Whirlycache是一个快速的、可配置的、存在于内存中的对象的缓存。它能够通过缓存对象来加快网站或应用程序的速度,否则就必须通过查询数据库或其他代价较高的处理程序来建立。
3、SwarmCache
SwarmCache是一个简单且有效的分布式缓存,它使用IPmulticast与同一个局域网的其他主机进行通讯,是特别为集群和数据驱动web应用程序而设计的。SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。
4、JCache
JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上。
5、ShiftOne
ShiftOneJavaObjectCache是一个执行一系列严格的对象缓存策略的Javalib,就像一个轻量级的配置缓存工作状态的框架。
什么是java中的"缓存"
我的观点,
象FileReader这样的比较低层的只能操作字节,而BufferedReader有
readLine()方法,返回的是一个String。而FileReader没有,我个人的理解:
开始创建BufferedReader时,FileReader被当作是一个参数,作为bufferedreader的一个实例变量保存着。当你调用bufferedreader.readLine()方法时,它就会调用filereader的read方法,一个一个地读字符,并且保存在它一块内存中,直到读到回车符,才将内容返回出来。这里两个类的区别在与FileReader的方法,你直接获取了数据,读出来的内容由你负责保存,而BufferedReader自己有内存保存一部分数据,你能调用他比较高级的readLine()方法来直接获取字符串
转载 如何安全的更新java本地缓存
但使用缓存,不可避免的就需要对缓存进行更新。最近在做一个项目的时候,发现多个老系统里采用了一种不安全的更新方案,该方案的主要思路如下:Java代码/**本地缓存*/ private List configs= null;/**本地缓存的上次更新时间*/ private long lastUpdateTime= 0; public List queryInterfaceList(){ long currentTime= System.currentTimeMillis();//判断本次缓存是否过期,过期则重新调用webservice查询数据,并更新缓存 if(currentTime- lastUpdateTime> 60000){ InterfaceManageResult result= interfaceManageFacade.queryAllInterfaceList(); if(null!= result&& result.isSuccess()){ configs= result.getInterfaceConfigList();} lastUpdateTime= currentTime;} if(!CollectionUtils.isEmpty(configs)){ return configs;}//本地缓存为空,则重新调用webservice查询数据,并更新缓存 InterfaceManageResult result= interfaceManageFacade.queryAllInterfaceList(); if(null== result||!result.isSuccess()){ return null;} configs= result.getInterfaceConfigList(); return configs;}当外部请求访问缓存数据时:如果缓存已经过期(当前时间-缓存的上次更新时间超过缓存的有效期),则重新调用webservice访问服务端查询数据,然后更新缓存。如果缓存未过期,但缓存为空,则重新调用webservice访问服务端查询数据,然后更新缓存。仔细分析一下,该方案存在以下几处安全隐患:如果某一时刻缓存过期,此时刚好有大量的请求并发访问缓存数据,则会给服务端造成很大的压力,有多少个并发请求,就会并发向服务端发起多少次webservice请求缓存第一次初始化前,如果有大量的请求并发访问缓存数据,同样会给服务端早晨很大的压力。即在某些时间点,会给服务端带来峰值抖动,其实,造成该隐患的根本原因在于:缓存的更新时机是由外部请求直接触发的。
文章分享结束,java中什么时候会产生缓存和什么是java中的"缓存"的答案你都知道了吗?欢迎再次光临本站哦!