• redis学习(二)——案例练习


    案例需求:


      1.提供index.html页面,页面中有一个省份下拉列表

      2.当页面加载完成后发送ajax请求,加载所有省份

      3.列表中的省份保持不变,则之后每次刷新页面都是从redis中获取

    * 注意:使用redis缓存一些不经常发生变化的数据。
        * 数据库的数据一旦发生改变,则需要更新缓存。
          * 数据库的表执行 增删改的相关操作,需要将redis缓存数据清除,再次存入
          * 在service对应的增删改方法中,将redis数据删除。

    前端页面:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>    
        <script src="js/jquery-3.3.1.min.js"></script>
        
        <script>
            $(function () {    
                //发送ajax请求,加载所有省份数据
                $.get("provinceServlet",{},function (data) {
                    //[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}]
    
                    //1.获取select
                    var province = $("#province");
                    //2.遍历json数组
                    $(data).each(function () {
                        //3.创建<option>
                        var option = "<option name='"+this.id+"'>"+this.name+"</option>";
    
                        //4.调用select的append追加option
                        province.append(option);
                    });
                });         
            });
    </script> </head> <body> <select id="province"> <option>--请选择省份--</option> </select> </body> </html>
    jar包:
    
    

     provinceServlet:

    @WebServlet("/provinceServlet")
    public class ProvinceServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
           /* //1.调用service查询
            ProvinceService service = new ProvinceServiceImpl();
            List<Province> list = service.findAll();
            //2.序列化list为json
            ObjectMapper mapper = new ObjectMapper();
            String json = mapper.writeValueAsString(list);*/
    
            //1.调用service查询
            ProvinceService service = new ProvinceServiceImpl();
            String json = service.findAllJson();
    
            System.out.println(json);
            //3.响应结果
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().write(json);
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }

    provinceService接口 和 provinceServiceImpl代码:

    public interface ProvinceService {
    
        public List<Province> findAll();
    
        public String findAllJson();
    }
    ===================================================================
    public class ProvinceServiceImpl implements ProvinceService { //声明dao private ProvinceDao dao = new ProvinceDaoImpl(); @Override public List<Province> findAll() { return dao.findAll(); } /** 使用redis缓存 */ @Override public String findAllJson() { //1.先从redis中查询数据 //1.1获取redis客户端连接 Jedis jedis = JedisPoolUtils.getJedis(); String province_json = jedis.get("province"); //2判断 province_json 数据是否为null if(province_json == null || province_json.length() == 0){ //redis中没有数据 System.out.println("redis中没数据,查询数据库..."); //2.1从数据中查询 List<Province> ps = dao.findAll(); //2.2将list序列化为json ObjectMapper mapper = new ObjectMapper(); try { province_json = mapper.writeValueAsString(ps); } catch (JsonProcessingException e) { e.printStackTrace(); } //2.3 将json数据存入redis jedis.set("province",province_json); //归还连接 jedis.close(); }else{ System.out.println("redis中有数据,查询缓存..."); } return province_json; } }

    provinceDao接口 和 provinceDaoImpl代码:

    public interface ProvinceDao {
    
        public List<Province> findAll();
    }
    
    ===========================================================
    
    public class ProvinceDaoImpl implements ProvinceDao {
    
        //1.声明成员变量 jdbctemplement
        private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());
    
        @Override
        public List<Province> findAll() {
            //1.定义sql
            String sql = "select * from province ";
            //2.执行sql
            List<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));
            return list;
        }
    }

    JDBCUtils:

    /**
     * JDBC工具类 使用Durid连接池
     */
    public class JDBCUtils {
    
        private static DataSource ds ;
    
        static {
            try {
                //1.加载配置文件
                Properties pro = new Properties();
                //使用ClassLoader加载配置文件,获取字节输入流
                InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
                pro.load(is);
    
                //2.初始化连接池对象
                ds = DruidDataSourceFactory.createDataSource(pro);
    
            } catch (IOException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        /**
         * 获取连接池对象
         */
        public static DataSource getDataSource(){
            return ds;
        }
        /**
         * 获取连接Connection对象
         */
        public static Connection getConnection() throws SQLException {
            return  ds.getConnection();
        }
    }

    JedisPoolUtils:

    public class JedisPoolUtils {
    
        private static JedisPool jedisPool;
    
        static{
            //读取配置文件
            InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");
            //创建Properties对象
            Properties pro = new Properties();
            //关联文件
            try{
                pro.load(is);
            }catch (IOException e){
                e.printStackTrace();
            }
            //获取数据,设置到JedisPoolConfig中
            JedisPoolConfig config = new JedisPoolConfig();
            config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));
            config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));
    
            //初始化JedisPool
            jedisPool = new JedisPool(config,pro.getProperty("host"),Integer.parseInt(pro.getProperty("port")));
        }
        /**
         * 获取连接方法
         */
        public static Jedis getJedis(){
            return jedisPool.getResource();
        }
    }

    druid.properties 和 jedis.properties以及sql文件:

     

     演示界面:

  • 相关阅读:
    python while 格式化 运算符 编码
    python 变量 if
    1、cad安装
    10、云存储—文件上传
    9、云函数
    8、云数据库
    8、小程序云开发
    7、页面交互js
    6、页面样式WXSS
    5、页面结构WXML
  • 原文地址:https://www.cnblogs.com/churujianghudezai/p/11939351.html
Copyright © 2020-2023  润新知