JavaWeb23.4【Redis:案例】

 

 

 

 

 

 

复制代码
 1 -- 创建数据库
 2 CREATE DATABASE day23; 
 3 
 4 -- 使用数据库
 5 USE day23; 
 6     
 7 -- 创建表           
 8 CREATE TABLE province(  
 9     id INT PRIMARY KEY AUTO_INCREMENT,
10     NAME VARCHAR(20) NOT NULL
11     
12 );
13 
14 -- 插入数据
15 INSERT INTO province VALUES(NULL,'北京');
16 INSERT INTO province VALUES(NULL,'上海');
17 INSERT INTO province VALUES(NULL,'广州');
18 INSERT INTO province VALUES(NULL,'陕西');
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
src目录下
 
《druid.properties》
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day23
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
 
《jedis.properties》
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10

 

复制代码
 1 package com.haifei.domain;
 2 
 3 public class Province {
 4 
 5     private int id;
 6     private String name;
 7 
 8     public int getId() {
 9         return id;
10     }
11 
12     public void setId(int id) {
13         this.id = id;
14     }
15 
16     public String getName() {
17         return name;
18     }
19 
20     public void setName(String name) {
21         this.name = name;
22     }
23 }
复制代码
复制代码
 1 package com.haifei.dao;
 2 
 3 import com.haifei.domain.Province;
 4 
 5 import java.util.List;
 6 
 7 public interface ProvinceDao {
 8 
 9     public List<Province> findAll();
10 }
复制代码
复制代码
 1 package com.haifei.dao.impl;
 2 
 3 import com.haifei.dao.ProvinceDao;
 4 import com.haifei.domain.Province;
 5 import com.haifei.service.ProvinceService;
 6 import com.haifei.util.JDBCUtils;
 7 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 8 import org.springframework.jdbc.core.JdbcTemplate;
 9 
10 import java.util.List;
11 
12 public class ProvinceDaoImpl implements ProvinceDao {
13 
14     //声明成员变量JDBCTemplate
15     private JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource()); //JDBC工具类中利用了Druid数据库连接池技术
16 
17     @Override
18     public List<Province> findAll() {
19         String sql = "select * from province";
20         List<Province> list = template.query(sql, new BeanPropertyRowMapper<>(Province.class));
21         return list;
22     }
23 }
复制代码
复制代码
 1 package com.haifei.service;
 2 
 3 import com.haifei.domain.Province;
 4 
 5 import java.util.List;
 6 
 7 public interface ProvinceService {
 8 
 9     public List<Province> findAll();
10 
11     public String findAllJson();
12 }
复制代码
复制代码
 1 package com.haifei.service.impl;
 2 
 3 import com.fasterxml.jackson.core.JsonProcessingException;
 4 import com.fasterxml.jackson.databind.ObjectMapper;
 5 import com.haifei.dao.ProvinceDao;
 6 import com.haifei.dao.impl.ProvinceDaoImpl;
 7 import com.haifei.domain.Province;
 8 import com.haifei.jedis.util.JedisPoolUtils;
 9 import com.haifei.service.ProvinceService;
10 import redis.clients.jedis.Jedis;
11 
12 import java.util.List;
13 
14 public class ProvinceServiceImpl implements ProvinceService {
15 
16     //声明成员变量d a o
17     ProvinceDao dao = new ProvinceDaoImpl();
18 
19     @Override
20     public List<Province> findAll() {
21         return dao.findAll();
22     }
23 
24     /**
25      * 使用redis缓存
26      * @return
27      */
28     @Override
29     public String findAllJson() {
30         //1 先从redis中查询数据
31         //1.1 获取redis客户端连接
32         Jedis jedis = JedisPoolUtils.getJedis();
33         //1.2 查询
34         String province_json = jedis.get("province");
35         //实际,在service对应的增删改方法中,应将redis缓存中province键及其值删除,以保证数据库增删改后缓存数据的正确性
36 
37         //2 判断province_json是否为null
38         if (province_json==null || province_json.length()==0){
39             //redis缓存中没有数据
40 
41             //2.1 从mysql数据库中查询数据
42             System.out.println("redis中无数据,查询数据库");
43             List<Province> ps = dao.findAll();
44             //2.2 将查询到的list序列化为json
45             ObjectMapper mapper = new ObjectMapper();
46             try {
47                 province_json = mapper.writeValueAsString(ps);
48             } catch (JsonProcessingException e) {
49                 e.printStackTrace();
50             }
51             //2.3 将json数据存入redis缓存
52             jedis.set("province", province_json);
53             //2.4 归还连接
54             jedis.close();
55         }else {
56             System.out.println("redis中有数据,查询缓存");
57         }
58 
59         return province_json;
60     }
61 
62 }
复制代码
复制代码
 1 package com.haifei.web.servlet;
 2 
 3 import com.fasterxml.jackson.databind.ObjectMapper;
 4 import com.haifei.domain.Province;
 5 import com.haifei.service.ProvinceService;
 6 import com.haifei.service.impl.ProvinceServiceImpl;
 7 
 8 import javax.servlet.ServletException;
 9 import javax.servlet.annotation.WebServlet;
10 import javax.servlet.http.HttpServlet;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import java.io.IOException;
14 import java.util.List;
15 
16 @WebServlet("/provinceServlet")
17 public class ProvinceServlet extends HttpServlet {
18     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
19         //加入redis缓存功能前:
20         /*//1 调用service查询
21         ProvinceService service = new ProvinceServiceImpl();
22         List<Province> list = service.findAll();
23         //2 序列化查询结果list为json数据
24         ObjectMapper mapper = new ObjectMapper();
25         String json = mapper.writeValueAsString(list);
26 //        System.out.println(json); //[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}]
27         //3 响应结果
28         response.setContentType("application/json;charset=utf-8"); //设置为JSON编码
29         response.getWriter().write(json);*/
30 
31 
32         //加入redis缓存功能后:
33         ProvinceService service = new ProvinceServiceImpl();
34         String json = service.findAllJson();
35         System.out.println(json);
36         response.setContentType("application/json;charset=utf-8"); //设置为JSON编码
37         response.getWriter().write(json);
38         /*
39         首次访问http://localhost:8080/day23/index.html
40         控制台:redis中无数据,查询数据库
41         再次访问//localhost:8080/day23/index.html
42         控制台:redis中有数据,查询缓存
43          */
44     }
45 
46     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
47         this.doPost(request, response);
48     }
49 }
复制代码
复制代码
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <script src="js/jquery-3.3.1.min.js"></script>
 7     <script>
 8         $(function () {
 9             
10             //发送ajax异步请求,加载所有省份数据
11             $.get(
12                 "provinceServlet",
13                 {},
14                 function (data) {
15                     // alert(data); //[object Object],[object Object],[object Object],[object Object]
16                     //[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}]
17 
18                     //1 获取select标签
19                     var province = $("#province");
20                     //2 遍历服务器端返回json的结果
21                     $(data).each(function () {
22                         //3 在select中创建<option>
23                         var option = "<option name='" + this.id + "'>" + this.name + "</option>";
24                         //4 调用select的append追加option
25                         province.append(option);
26                     });
27                 },
28                 "json"
29             );
30 
31         });
32     </script>
33 </head>
34 <body>
35     <select id="province">
36         <option>--请选择省份--</option>
37     </select>
38 </body>
39 </html>
复制代码

 

 

 

 

 

 

 

 

 

 

posted @   yub4by  阅读(58)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示