JAVA中的缓存技术ehcacha
1.Ehcacha基本介绍
EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点,是Hibernate中默认的CacheProvider。具体介绍可见百度百科(https://baike.baidu.com/item/ehcache/6036099?fr=aladdin)。为了提供系统的性能,减少服务器的压力,较少对数据库的访问的优化系统的主要一环,在我们的实际项目中,我们可以对于那些,不会经常变化的数据(也会存放到数据库中的)减少对数据库的访问,在第一次请求后可以缓存到本地。这个时候就需要一种缓存技术了。当然,缓存技术有很多,这里就介绍一下Ecacha。
2.环境准备
jar包、配置文件:本程序会在结尾给出程序源码(包括jar包);
需要注意的是:这里的程序创建的是一个基本的动态网页进行实例介绍的,配置文件放在src目录下的。
3.代码解析
前端:
<div align="center">
<p>信息状况:${msg }</p>
<form action="${pageContext.request.contextPath }/info" method="get">
<input type="submit" value="查看数据库的数据" />
</form>
<table border="0">
<c:forEach items="${list}" var="user">
<tr>
<td>数据库中的用户名:</td><td>${user.userName} </td>
<td>数据中的用户邮箱</td><td>${user.email}</td>
</tr>
</c:forEach>
</table>
</div>
后端:
public class InfoServlet extends HttpServlet {
private static JDBCUtil JDBCUtile = new JDBCUtil();
private static Connection conn;
private static PreparedStatement ps;
private static ResultSet rs;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.创建缓存管理器
CacheManager cm=CacheManager.create(InfoServlet.class.getClassLoader().getResourceAsStream("ehcache.xml"));
//2.获取存的缓存
Cache cache = cm.getCache("user");
//3.通过缓存获取数据,将cache看作是一个map集合
Element element = cache.get("list");
List<User> list=new ArrayList<User>();
//4.判断数据
if(element==null) {
//从数据库获取
try {
conn = JDBCUtile.getConn();
String sql = "select * from user";
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
User user = new User();
user.setId(rs.getString("id"));
user.setUserName(rs.getString("userName"));
user.setEmail(rs.getString("email"));
user.setPassword(rs.getString("password"));
user.setSex(rs.getInt("sex"));
user.setPhone(rs.getString("phone"));
list.add(user);
}
JDBCUtile.closeConn(rs, ps, conn);
} catch (Exception e) {
e.printStackTrace();
}
//将list放入到缓存
cache.put(new Element("list", list));
request.setAttribute("list", list);
request.setAttribute("msg", "缓存中无数据");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}else {
//直接返回缓存的数据
list =(List<User>) element.getObjectValue() ;
request.setAttribute("list", list);
request.setAttribute("msg", "缓存中有数据");
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
其他配置,请参照源码
4.运行结果
5.总结
程序源码:链接:https://pan.baidu.com/s/16opqzhrzjKWmh31R1Pgfpw 密码:vnhv
对于ehcacha的具体使用,读者可以根据自身情况去改善,本博客也只是通过这种方式去介绍这种缓存机制。