首页 > 数据库 >889~891 分析,环境搭建,实现查询数据库,redis缓存优化

889~891 分析,环境搭建,实现查询数据库,redis缓存优化

时间:2023-02-25 13:55:53浏览次数:48  
标签:province 891 889 redis json import com public

案例:

  案例需求:

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

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

 

 

 

CREATE DATABASE day23; -- 创建数据库
USE day23; 			   -- 使用数据库
CREATE TABLE province(   -- 创建表
	id INT PRIMARY KEY AUTO_INCREMENT,
	NAME VARCHAR(20) NOT NULL
	
);
-- 插入数据
INSERT INTO province VALUES(NULL,'北京');
INSERT INTO province VALUES(NULL,'上海');
INSERT INTO province VALUES(NULL,'广州');
INSERT INTO province VALUES(NULL,'陕西');

 

public class Province {

    private int id;
    private String name;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

 

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;
    }
}

 

/**
 * 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();
    }
}

 

public interface ProvinceService {

    public List<Province> findAll();

    public String findAllJson();
}

 

<!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>

 

package com.example.itcast.service.impl;


import com.example.itcast.dao.ProvinceDao;
import com.example.itcast.dao.impl.ProvinceDaoImpl;
import com.example.itcast.domain.Province;
import com.example.itcast.jedis.util.JedisPoolUtils;
import com.example.itcast.service.ProvinceService;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import redis.clients.jedis.Jedis;

import java.util.List;

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;
    }
}

 

package com.example.itcast.web.servlet;

import com.example.itcast.service.ProvinceService;
import com.example.itcast.service.impl.ProvinceServiceImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@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);
    }
}

 注意:使用redis缓存一些不经常发生变化的数据。

  数据库的数据一旦改变,则需要更新缓存

    数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入

    在service对应的增删改方法中,将redis数据删除

标签:province,891,889,redis,json,import,com,public
From: https://www.cnblogs.com/agzq/p/17154275.html

相关文章

  • redis(5)列表List
    Redis列表Redis单键多值:Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能......
  • redis 集群管理工具可视化 官方
    Redis官方管理工具下载地址:https://redis.com/redis-enterprise/redis-insight/#insight-form进入页面点击download  输入email选择版本下载  下载到本......
  • redis_命令操作_通用命令与redis_持久化_RDB
    redis_命令操作_通用命令1.keys*:查询所有的键2.typekey:获取键对应的value的类型3.delkey:删除指定的keyvalue   redis_持久化_......
  • redis_命令操作_list与redis_命令操作_set&sortedset
    redis_命令操作_list1.列表类型list:可以添加一个元素到列表的头部(左边)或者尾部(右边) 1.添加: 1.l......
  • redis_数据结构介绍与redis_命令操作_string&hash
    redis_数据结构介绍1.redis的数据结构redis存储的是:key,value格式的数据,其中key都是字符串,value有5种不同的数据结构......
  • Redis6.2.6集群
    环境:Linux版本:CentOS7集群部署之前先完成单机安装stansalone准备echo511>/proc/sys/net/core/somaxconn下载Redis:redis-stack-server-6.2.6https://redis.io/ ......
  • Redis:四、事务
    Redis系列文章目录@目录Redis系列文章目录一、Redis事务是什么?概念:如何使用?二、Redis消息发布订阅?一、Redis事务是什么?概念:可以一次执行多个命令,本质是一组命令的集......
  • Redis:五、主从复制
    @目录一、主从复制的概念二、主从复制基础用法2.1工作流程(1)建立连接2.2工作流程(2)数据同步2.3工作流程(3)命令传播三、主从复制实例四、主从复制常见问题五、主从复制的......
  • Redis:六、哨兵模式
    @目录一、哨兵模式简介二、哨兵的搭建三、哨兵工作原理一、哨兵模式简介哨兵(Sentinel)是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机......
  • Redis:七、集群
    @目录一、集群是什么?二、集群的存储结构设计三、集群的搭建四、主从下线和主从切换总结一、集群是什么?集群:集群就是使用网络将若干台计算机联通起来,并提供统一的管理方......