JAVA中的缓存技术ehcacha

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的具体使用,读者可以根据自身情况去改善,本博客也只是通过这种方式去介绍这种缓存机制。

猜你喜欢

转载自blog.csdn.net/meiqi0538/article/details/79818092
今日推荐