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>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 让容器管理更轻松!