java缓存服务器
1、TreeCache / JBossCache
JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能。缓存数据被自动复制,让你轻松进行JBoss服务器之间 的集群工作。JBossCache能够通过JBoss应用服务或其他J2EE容器来运行一个MBean服务,当然,它也能独立运行。
2、WhirlyCache
Whirlycache是一个快速的、可配置的、存在于内存中的对象的缓存。它能够通过缓存对象来加快网站或应用程序的速度,否则就必须通过查询数据库或其他代价较高的处理程序来建立。
3、SwarmCache
SwarmCache是一个简单且有效的分布式缓存,它使用IP multicast与同一个局域网的其他主机进行通讯,是特别为集群和数据驱动web应用程序而设计的。SwarmCache能够让典型的读操作大大超过写操作的这类应用提供更好的性能支持。
4、JCache
JCache是个开源程序,正在努力成为JSR-107开源规范,JSR-107规范已经很多年没改变了。这个版本仍然是构建在最初的功能定义上。
5、ShiftOne
ShiftOne Java Object Cache是一个执行一系列严格的对象缓存策略的Java lib,就像一个轻量级的配置缓存工作状态的框架。
2. 如何清除JAVA缓存
java清除缓存办法:
1.禁止客户端缓存要在<head>中加入类似如下内容:
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或 <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
2.在服务器的动态网页中禁止缓存,要加入类似如下脚本
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
3. java中缓存区是什么数据结构
哪种缓冲区
多数的,最终是byte[]的
4. java清缓存前可以进后台方法,清完缓存不进了
关于java清缓存前可以进后台方法,清完缓存不进了相关资料如下
java我们在使用缓存时,往往先尝试去缓存中取值,如果没有,再去数据库取值,如果数据库也没有值,则根据业务需求,返回空或者抛异常。
如果用户一直访问一个数据库不存在的数据,比如id为-1的数据,就会导致每次请求都会先去缓存查一次,然后再去数据库查一次,造成严重的性能问题。这种情况就叫缓存穿透。
解决方案
以下几种解决方案:对请求参数做校验,比如用户鉴权校验,id做基础校验,id <= 0的直接拦截。
如果查询到数据库没有值,也将对应的key存进缓存中,value为null。这样下次查询就直接从缓存返回了。但这里的key的缓存时间应该比较短,比如30s。防止后面在数据库插入了这条数据,而用户获取不到。
使用布隆过滤器,判断一个key是否已经查过了,如果已经查过了,就不去数据库查询。
缓存击穿
缓存击穿指的是,一个key的访问量非常大,比如某秒杀活动,有1w/s的并发量。这个key在某一时刻过期,那这些大量的请求就会一瞬间到数据库,数据库可能会直接崩溃。
解决方案
缓存击穿的解决方案也有几种,可以配合使用:对于热点数据,慎重考虑过期时间,确保热点期间key不会过期,甚至有些可以设置永不过期。
使用互斥锁(比如Java的多线程锁机制),第一个线程访问key的时候就锁住,等查询数据库返回后,把值插入到缓存后再释放锁,这样后面的请求就可以直接取缓存里面的数据了。
缓存雪崩
缓存雪崩指的是,在某一时刻,多个key失效。这样就会有大量的请求从缓存中获取不到值,全部到数据库。还有另一种情况,就是缓存服务器宕机,也算做缓存雪崩。
解决方案
针对上述两种情况,缓存雪崩有两种解决方案:对每个key的过期时间设置一个随机值,而不是所有key都相同。
使用高可用的分布式缓存集群,确保缓存的高可用性,比如redis-cluster。
5. java如何清除数据缓存
清除Java缓存的方法
步骤一:
找到Java的安装目录(默认为C:\Program Files\Java)选择当前使用的jre版本,如果用的版本为jre5则进入jre5文件夹,如果用的版本为jre6则进入jre6文件夹。在该文件夹下进入bin文件夹。双击打开文件javacpl.exe
2014下半年教师资格证统考大备战 中学教师资格考试 小学教师资格考试 幼儿教师资格考试 教师资格证面试
步骤二:
在常规选项中的临时Internet文件点击“设置”按钮再点击“删除文件”按钮,删除所有的临时文件。
步骤三:
删除完缓存之后,需要关闭所有浏览器。再次打开浏览器进入虚拟实验系统即可。
6. Java进阶:用缓冲技术提高JSP的性能和稳定
一 概述
在Web应用中 有些报表的生成可能需要数据库花很长时间才能计算出来 有的网站提供天气信息 它需要访问远程服务器进行SOAP调用才能得到温度信息 所有这一切都属于复杂信息的例子 在Web页面中加入过多的复杂信息可能导致Web服务器 数据库服务器负荷过重 JSP代码块缓冲为开发者带来了随意地增加各种复杂信息的自由
JSP能够在标记库内封装和运行复杂的Java代码 它使得JSP页面文件更容易维护 使得非专业开发人员使用JSP页面文件更加方便 现在已经有许多标记库 它们或者是商业产品 或者是源代码开放产品 但这些产品中的大多数都只是用标记库的形式实现原本可以用一个简单的Java Scriptlet实现的功能 很少有产品以某种创造性的方式使用定制标记 提供在出现JSP定制标记库之前几乎不可能实现的用法
OSCache标记库由OpenSymphony设计 它是一种开创性的JSP定制标记应用 提供了在现有JSP页面之内实现快速内存缓冲的功能 虽然已经有一些供应商在提供各种形式的缓存产品 但是 它们都属于面向特定供应商的产品 OSCache能够在任何JSP 兼容的服务器上运行 它不仅能够为所有用户缓冲现有JSP代码块 而且能够以用户为单位进行缓冲 OSCache还包含一些提高可伸缩性的高级特性 比如 缓冲到磁盘 可编程的缓冲刷新 异常控制 等等 另外 正如OpenSymphony的其他产品 OSCache的代码也在一个开放源代码许可协议之下免费发行
本文以一个假想的拍卖网站设计过程为例 介绍OSCache的工作过程 这个假想的Web网站将包含 一个报告最近拍卖活动的管理页面 一个功能完整 带有各种宣传信息的主页 一个特殊的导航条 它包含了用户所有尚未成交的拍卖活动信息
二 管理页面
拍卖网站包含一个管理报表 数据库服务器需要数秒时间才能创建这样一个报表 报表生成时间长这一点很重要 因为我们可能让多个管理员监视系统运行情况 同时又想避免管理员每次访问时都重新生成这个报表 为了实现这一点 我们将把整个页面封装到一个应用级的缓冲标记之内 这个缓冲标记每隔 小时刷新 其他供应商提供的一些产品也具有类似的功能 只是OSCache比它们做得更好
为简单计 我们将不过多地关注格式问题 在编写管理页面时 我们首先把标记库声明加入到页面
<%@ taglib uri= cachetags prefix= cache %>
接下来我们要用cache标记来包围整个页面 cache标记的默认缓冲时间是 小时
<cache:cache> 复杂的管理报表 </cache:cache>
现在管理页面已经被缓冲 如果管理员在页面生成后的一个小时之内再次访问同一页面 他看到的将是以前缓存的页面 不需要由数据库服务器再次生成这个报表
三 主页
拍卖网站的主页显示网站活动情况 宣传那些即将结束的拍卖活动 我们希望显示出正在进行的拍卖活动数量 当前登录用户数量 在短期内就要结束的拍卖活动的清单 以及当前时间 这些信息有着不同的时间精确度要求 网站上的拍卖活动通常持续数天 因此我们可以把缓冲有效拍卖活动数量的时间定为 个小时 用户数量的变化显然要频繁一些 但这里我们将把这个数值每次缓冲 分钟 最后 我们希望页面中显示的当前时间总是精确的页面访问时间
在主页中声明标记库之后 我们首先以不带缓冲的方式直接输出当前日期
现在是 <%=new java util Date()%>
接下来 我们要显示一个清单 列出那些将在短期内结束的拍卖活动
<cache:cache> <ul> <% // 构造一个包含最近拍卖活动的Iterator Iterator auctions = while (auctions hasMore()) { Auction auction = (Auction)auctions next(); %><li><%=auction%></li%< } %> </ul> </cache:cache>
最后 我们希望显示出正在进行的拍卖活动的数量 这个数字需要缓冲 小时 由于cache标记需要的是缓冲数据的秒数 我们把 小时转换成 秒
<cache:cache time= > <% //查询数据库得到拍卖活动总数 int auctionCount = %> 本网站正在进行的拍卖活动有<%=auctionCount%>个! </cache>
可以看到 我们只用少量的代码就构造出了一个带有复杂缓冲系统的主页 这个缓冲系统对页面各个部分分别进行缓冲 而且各个部分的缓冲时间完全符合它们各自的信息变化频繁程度 由于有了缓冲 现在我们可以在主页中放入更多的内容 而在以前没有缓冲的情况下 主页中放入过多的内容会导致页面访问速度变慢 甚至可能给数据库服务器带来过重的负载
四 导航条
假设在规划网站的时候 我们决定在左边导航条的下方显示购物车内容 我们将显示出用户所拍卖的每一种商品的出价次数和当前报价 以及所有那些当前用户出价最高的商品的清单
我们利用会话级的缓冲能力在导航条中构造上述功能 把下面的代码放入模板或者包含文件 以便网站中的其他页面引用这个导航条
<cache:cache key= navbar scope= session time= > <% //提取并显示当前的出价信息 %> </cache:cache>
在这里我们引入了两个重要的属性 即key和scope 在本文前面的代码中 由于cache标记能够自动为代码块创建唯一的key 所以我们不需要手工设置这个key属性 但在这里 我们想要从网站的其余部分引用这个被缓冲的代码块 因此我们显式定义了该cache标记的key属性 第二 scope属性用来告诉cache标记当前代码块必须以用户为单位缓冲 而不是为所有用户缓冲一次
在使用会话级缓冲时应该非常小心 应该清楚 虽然我们可以让复杂的导航条减少 倍或 倍的服务器负载 但它将极大地增加每个会话所需要的内存空间 在CPU能力方面增加可能的并发用户数量无疑很理想 但是 一旦在内存支持能力方面让并发用户数量降低到了CPU的限制之下 这个方案就不再理想
正如本文前面所提到的 我们希望从网站的其余部分引用这个缓冲的代码块 这是因为 当一个用户增加了一个供拍卖的商品 或者出价竞购其他用户拍卖的商品时 我们希望刷新缓冲 使得导航条下一次被读取时具有最新的内容 虽然这些数据可能因为其他用户的活动而改变 但如果用户在网站上执行某个动作之后看到自己的清单仍未改变 他可能会感到非常困惑
OSCache库提供的flush标记能够刷新缓冲内容 我们可以把下面的代码加入到处理用户动作且可能影响这一区域的页面之中
<cache:flush key= navbar scope= session />
当用户下次访问它时 navbar缓冲块将被刷新
至此为止 我们这个示例网站的构造工作已经完成且可以开始运行 下面我们来看看OSCache的异常处理能力 即使缓冲的内容已经作废 比如在缓冲块内出现了Java异常 OSCache标记库仍旧允许我们用编程的方法显示这些内容 有了这种异常控制功能 我们可以拆除数据库服务器和Web服务器之间的连接 而网站仍能够继续运行 JSP 规范引入了TryCatchFinally接口 这个接口允许标记本身检测和处理Java异常 因此 标记可以结合这种异常处理代码 使得JSP页面更简单 更富有条理
OpenSymphony正在计划实现其他的缓冲机制以及一个可管理性更好的主系统 它将使我们能够对缓冲使用的RAM和磁盘空间进行管理 一旦有了这些功能 我们就能够进一步提高网站的响应速度和可靠性
【结束语】
lishixin/Article/program/Java/JSP/201311/20726
7. 什么是Java缓存技术Cache
java缓存技术
一、什么是缓存
1、Cache是高速缓冲存储器
一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问
2、凡是位于速度相差较大的两种硬件/软件之间的,用于协调两者数据传输速度差异的结构,均可称之为
Cache
二、缓存的分类
1、基于web应用的系统架构图
2、在系统架构的不同层级之间,为了加快访问速度,都可以存在缓存
操作系统磁盘缓存->减少磁盘机械操作
数据库缓存->减少文件系统I/O
应用程序缓存->减少对数据库的查询
Web服务器缓存->减少应用服务器请求
客户端浏览器缓存->减少对网站的访问。