Redis-学习笔记06【Redis案例】
- Java后端 學習路線 筆記匯總表【黑馬程序員】
目錄
第6節(jié) Redis案例
案例_分析&環(huán)境搭建
day23.sql
druid.properties
案例_實現(xiàn)_查詢數(shù)據(jù)庫
案例_實現(xiàn)_redis緩存優(yōu)化
package cn.itcast.dao;
ProvinceDaoImpl.java
ProvinceDao.java
package cn.itcast.domain;
Province.java
package cn.itcast.jedis;
JedisPoolUtils.java
package cn.itcast.service;
ProvinceServiceImpl.java
ProvinceService.java
package cn.itcast.util;
JDBCUtils.java
package cn.itcast.web;
ProvinceServlet.java
web
index.html
第6節(jié) Redis案例
案例_分析&環(huán)境搭建
案例
案例需求:
?? ?1. 提供index.html頁面,頁面中有一個省份(下拉列表)。
?? ?2. 當頁面加載完成后,發(fā)送ajax請求,加載所有省份。
day23.sql
CREATE DATABASE day23; -- 創(chuàng)建數(shù)據(jù)庫 USE day23; -- 使用數(shù)據(jù)庫 CREATE TABLE province( -- 創(chuàng)建表id INT PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(20) NOT NULL); -- 插入數(shù)據(jù) INSERT INTO province VALUES(NULL,'北京'); INSERT INTO province VALUES(NULL,'上海'); INSERT INTO province VALUES(NULL,'廣州'); INSERT INTO province VALUES(NULL,'陜西');druid.properties
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql:///day23 username=root password=root initialSize=5 maxActive=10 maxWait=3000??
案例_實現(xiàn)_查詢數(shù)據(jù)庫
案例_實現(xiàn)_redis緩存優(yōu)化
* 注意:使用redis緩存一些不經(jīng)常發(fā)生變化的數(shù)據(jù)。
?? ?* 數(shù)據(jù)庫的數(shù)據(jù)一旦發(fā)生改變,則需要更新緩存。
?? ??? ?* 數(shù)據(jù)庫的表執(zhí)行“增刪改”的相關(guān)操作,需要將redis緩存數(shù)據(jù)清空,再次存入。
?? ??? ?* 在service對應(yīng)的增刪改方法中,將redis數(shù)據(jù)刪除。
package cn.itcast.dao;
ProvinceDaoImpl.java
package cn.itcast.dao.impl;import cn.itcast.dao.ProvinceDao; import cn.itcast.domain.Province; import cn.itcast.util.JDBCUtils; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate;import java.util.List;public class ProvinceDaoImpl implements ProvinceDao {//1.聲明成員變量 jdbctemplementprivate JdbcTemplate template = new JdbcTemplate(JDBCUtils.getDataSource());@Overridepublic List<Province> findAll() {//1.定義sqlString sql = "select * from province ";//2.執(zhí)行sqlList<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));return list;} }ProvinceDao.java
package cn.itcast.dao;import cn.itcast.domain.Province;import java.util.List;public interface ProvinceDao {public List<Province> findAll(); }package cn.itcast.domain;
Province.java
package cn.itcast.domain;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;} }package cn.itcast.jedis;
JedisPoolUtils.java
package cn.itcast.jedis.util;import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig;import java.io.IOException; import java.io.InputStream; import java.util.Properties;/*** JedisPool工具類* 加載配置文件,配置連接池的參數(shù)* 提供獲取連接的方法*/ public class JedisPoolUtils {private static JedisPool jedisPool;static {//讀取配置文件InputStream is = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");//創(chuàng)建Properties對象Properties pro = new Properties();//關(guān)聯(lián)文件try {pro.load(is);} catch (IOException e) {e.printStackTrace();}//獲取數(shù)據(jù),設(shè)置到JedisPoolConfig中JedisPoolConfig config = new JedisPoolConfig();//pro.getProperty("maxTotal"):獲取的值是字符串,配置要求的是int值config.setMaxTotal(Integer.parseInt(pro.getProperty("maxTotal")));//最大連接數(shù)config.setMaxIdle(Integer.parseInt(pro.getProperty("maxIdle")));//最大空閑連接數(shù)//初始化JedisPool對象jedisPool = new JedisPool(config, pro.getProperty("host"), Integer.parseInt(pro.getProperty("port")));}/*** 獲取連接方法*/public static Jedis getJedis() {return jedisPool.getResource();//獲取連接} }package cn.itcast.service;
ProvinceServiceImpl.java
package cn.itcast.service.impl;import cn.itcast.dao.ProvinceDao; import cn.itcast.dao.impl.ProvinceDaoImpl; import cn.itcast.domain.Province; import cn.itcast.jedis.util.JedisPoolUtils; import cn.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 {//聲明daoprivate ProvinceDao dao = new ProvinceDaoImpl();@Overridepublic List<Province> findAll() {return dao.findAll();}/*** 使用redis緩存*/@Overridepublic String findAllJson() {//1.先從redis中查詢數(shù)據(jù)//1.1獲取redis客戶端連接Jedis jedis = JedisPoolUtils.getJedis();String province_json = jedis.get("province");//2判斷 province_json 數(shù)據(jù)是否為nullif (province_json == null || province_json.length() == 0) {//redis中沒有數(shù)據(jù)System.out.println("redis中沒數(shù)據(jù),查詢數(shù)據(jù)庫...");//2.1從數(shù)據(jù)中查詢List<Province> ps = dao.findAll();//2.2將list序列化為jsonObjectMapper mapper = new ObjectMapper();try {province_json = mapper.writeValueAsString(ps);} catch (JsonProcessingException e) {e.printStackTrace();}//2.3 將json數(shù)據(jù)存入redisjedis.set("province", province_json);//歸還連接jedis.close();} else {System.out.println("redis中有數(shù)據(jù),查詢緩存...");}return province_json;} }ProvinceService.java
package cn.itcast.service;import cn.itcast.domain.Province;import java.util.List;public interface ProvinceService {public List<Province> findAll();public String findAllJson(); }package cn.itcast.util;
JDBCUtils.java
package cn.itcast.util;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.SQLException; import java.util.Properties;/*** JDBC工具類 使用Durid連接池*/ public class JDBCUtils {private static DataSource ds;static {try {//1.加載配置文件Properties pro = new Properties();//使用ClassLoader加載配置文件,獲取字節(jié)輸入流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();} }package cn.itcast.web;
ProvinceServlet.java
package cn.itcast.web.servlet;import cn.itcast.service.ProvinceService; import cn.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.調(diào)用service查詢ProvinceService service = new ProvinceServiceImpl();List<Province> list = service.findAll();//2.序列化list為jsonObjectMapper mapper = new ObjectMapper();String json = mapper.writeValueAsString(list);*///1.調(diào)用service查詢ProvinceService service = new ProvinceServiceImpl();String json = service.findAllJson();System.out.println(json);//3.響應(yīng)結(jié)果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);} }web
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 () {//發(fā)送ajax請求,加載所有省份數(shù)據(jù)$.get("provinceServlet", {}, function (data) {//[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"廣州"},{"id":4,"name":"陜西"}]//1.獲取selectvar province = $("#province");//2.遍歷json數(shù)組$(data).each(function () {//3.創(chuàng)建<option>var option = "<option name='" + this.id + "'>" + this.name + "</option>";//4.調(diào)用select的append追加optionprovince.append(option);});});});</script> </head> <body><select id="province"><option>--請選擇省份--</option></select> </body> </html>加油~~~
總結(jié)
以上是生活随笔為你收集整理的Redis-学习笔记06【Redis案例】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis-学习笔记05【Jedis连接
- 下一篇: MyBatis-学习笔记08【08.动态