Jedis案例

案例需求:
  1. 提供index.html页面,页面中有一个省份 下拉列表
  2. 当 页面加载完成后 发送ajax请求,加载所有省份

sql语句:

 

复制代码
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,'陕西');
复制代码

 

 

Province实体类:

复制代码
public class Province {
    private int id;
    private String name;
    
    @Override
    public String toString() {
        return "Province{" +
                "id=" + id +
                ", name='" + 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;
    }
}
复制代码

ProvinceDao接口:

public interface ProvinceDao {
    public List<Province> findAll();
}

ProvinceDaoImpl实现类:

复制代码
public class ProvinceDaoImpl implements ProvinceDao {

    //声明成员变量 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.class));
        return list;
    }
}
复制代码

ProvinceService接口:

public interface ProvinceService {
    public List<Province> findAll();
}

ProvinceServiceImpl实现类:

public class ProvinceServiceImpl implements ProvinceService {
    private ProvinceDao dao = new ProvinceDaoImpl();
    @Override
    public List<Province> findAll() {
        return dao.findAll();
    }
}

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);
        //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);
    }
}
复制代码

index.html页面:

复制代码
<!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) {
                //1、获取servlet
                var province = $("#province");
                //2、遍历json数组
                $(data).each(function () {
                    //3、创建<option>
                    var option = "<option name='"+this.id+"'>"+this.name+"</option>";
                    //4、调用select的append
                    province.append(option);
                });
            });
        });
    </script>
</head>
<body>

    <select id="province">
        <option>--请选择省份--</option>
    </select>

</body>
</html>
复制代码

 

 

 

 

redis缓存优化

ProvinceService接口:

public interface ProvinceService {
    public List<Province> findAll();

    public String findAllJson();
}

ProvinceServiceImpl实现类:

复制代码
    /*
        使用redis缓存
     */
    @Override
    public String findAllJson() {
        //1、先从redis中查询数据
        //获取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中没有数据,查询数据库");
            //从数据库中查询
            List<Province> list = dao.findAll();
            //将list序列化为json
            ObjectMapper mapper = new ObjectMapper();
            try {
                province_json = mapper.writeValueAsString(list);
            } catch (JsonProcessingException e) {
                e.printStackTrace();
            }
            //将json数据存入到redis中
            jedis.set("province",province_json);
            //归还连接
            jedis.close();
        }else {
            System.out.println("redis中有数据,查询缓存");
        }

        return province_json;
    }
复制代码

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);*/
        String json = service.findAllJson();
        //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数据删除。

 

posted @   xjw12345  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示