redis实例--加载所有省份

 2023-09-05 阅读 68 评论 0

摘要:1.需求分析: 1. 提供index.html页面,页面中有一个省份 下拉列表 2. 当页面加载完成后 发送ajax请求,加载所有省份 2.项目结构 3.pom.xml文件配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="

1.需求分析:

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

 2. 项目结构

 3.pom.xml文件配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.hotdas</groupId><artifactId>redis_ex</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.8</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.4</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.8</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>5.0.5.RELEASE</version></dependency><dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.1.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.32</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.2.1</version><scope>provided</scope></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.3</version></dependency></dependencies><!-- 配置Tomcat插件 --><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>2.3.2</version><configuration><source>1.7</source><target>1.7</target></configuration></plugin><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><configuration><!-- 指定端口 --><port>8080</port><!-- 请求路径 --><path>/</path></configuration></plugin></plugins></build>
</project>

 4.index页面

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>加载省份信息</title><script src="js/jquery-3.3.1.min.js"></script><script><!--$符号表示随着页面的加载而加载-->//定义异步请求方法,function ()表示里面的执行方法$(function () {//发送异步请求,gei方法发送请求,访问ProvinceServlet路劲,{}传参数,没有参数,回调时需要解析数据,回调方法function data()$.get("provinceServlet",{},function(data) {//1.select,获取id标签var province = $("#province");//遍历json数据,each代表遍历所有内容$(data).each(function () {//3.获取省份,有多个option,通过循环var option = "<option name='"+this.id+"'>"+this.name+"</option>";//4.调用#province添加option内容,append()方法表示在列表中追加节点province.append(option);})});});</script>
</head>
<body>
<!--selcet下拉列表-->
<select id="province"><option>--请选择省份--</option>
</select>
</body>
</html>

5.druid.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/db_redis
username=root
password=zq1234
initialSize=5
maxActive=10
maxWait=3000

6.jedis.properties

host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10

7.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><!--配置servlet--><servlet><!--servlet名称--><servlet-name>provinceServlet</servlet-name><!--servlet类--><servlet-class>com.lingnan.web.servlet.ProvinceServlet</servlet-class><!--启动初始化servlet--><load-on-startup>1</load-on-startup></servlet><!--配置servlet映射--><servlet-mapping><servlet-name>provinceServlet</servlet-name><!--servlet路径映射--><url-pattern>/provinceServlet/*</url-pattern></servlet-mapping>
</web-app>

8.ProvinceServlet

package com.lingnan.web.servlet;import com.lingnan.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;//加servlet请求路劲注解
@WebServlet("/ProvinceServlet")
public class ProvinceServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//调用dopost方法this.doPost(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//获取servicerProvinceServiceImpl provinceService = new ProvinceServiceImpl();//查询所有信息转换为json格式String json =provinceService.findAllJson();System.out.println("json的值");System.out.println(json);//2.给页面返回响应结果,设置输出json类型,charset代表字符类型设置为utf-8resp.setContentType("application/json;charset=utf-8");//将结果写到页面,显示resp.getWriter().write(json);}}

9.ProvinceServiceImpl

package com.lingnan.service.impl;import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.lingnan.dao.impl.ProvinceDaoImpl;
import com.lingnan.domain.Province;
import com.lingnan.jedis.util.JedisPoolUtils;
import com.lingnan.service.ProvinceService;
import redis.clients.jedis.Jedis;import java.util.List;public class ProvinceServiceImpl implements ProvinceService {//service下一步需要调用Dao方法,声明Daoprivate ProvinceDaoImpl provinceDao= new ProvinceDaoImpl();private  String provincejson=null;@Overridepublic String findAllJson() {//一.应该先从redis中命中//连接redis服务器查询key的数据Jedis jedis = JedisPoolUtils.getJedis();String provincejson = jedis.get("province");//判断key是否存在,如果provincejson==null || provincejson.length()==0表示redis没有该key,需要从数据库中获取数据if(provincejson==null || provincejson.length()==0){//二.在缓存中没有该key,从数据库中获取System.out.println("从数据库中获取数据返回11");//1.获取province数据,拿到list集合List<Province> list =  provinceDao.findAll();//2.把list集合数据转换为json,ObjectMapper objectMapper=new ObjectMapper();try {provincejson = objectMapper.writeValueAsString(list);} catch (JsonProcessingException e) {e.printStackTrace();}//三.加入到redis缓存中,provinc为rediskey,数据provincejsonString province = jedis.set("province",provincejson);//四.释放redis连接jedis.close();}else {System.out.println("从redis缓冲中获取数据返回22");}return provincejson;}
}

10.ProvinceService

package com.lingnan.service;public interface ProvinceService {public  String findAllJson();
}

11.Province实体类

package com.lingnan.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;}@Overridepublic String toString() {return "Province{" +"id=" + id +", name='" + name + '\'' +'}';}
}

12.ProvinceDaoImpl

package com.lingnan.dao.impl;import com.lingnan.dao.ProvinceDao;
import com.lingnan.domain.Province;
import com.lingnan.util.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;import java.util.List;public class ProvinceDaoImpl implements ProvinceDao {//1.使用JdbcTemplate查询,获取数据源private JdbcTemplate jdbcTemplate=new JdbcTemplate(JDBCUtils.getDataSource());@Overridepublic List<Province> findAll() {System.out.println(jdbcTemplate);//创建sql语句String sql="select * from province";//执行sql查询,返回list列表List<Province> provinceList = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Province>(Province.class));System.out.println(provinceList);return provinceList;}
}

13.ProvinceDao

package com.lingnan.dao;import com.lingnan.domain.Province;import java.util.List;public interface ProvinceDao {public List<Province>  findAll();
}

14.JDBCUtils

package com.lingnan.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加载配置文件,获取字节输入流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();}
}

15.JedisPoolUtils

package com.lingnan.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;/*
加载配置文件,并连接redis服务器
提供获取连接的方法*/
public class JedisPoolUtils {private static JedisPool jedisPool;//静态代码块,随着类的加载而加载static {//读取配置文件InputStream inputStream = JedisPoolUtils.class.getClassLoader().getResourceAsStream("jedis.properties");//封装属性对象Properties properties = new Properties();try {properties.load(inputStream);} catch (IOException e) {e.printStackTrace();}//构建连接池配置对象JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();//maxTotal需要转换为int,设置最大连接数,通过properties获取jedisPoolConfig.setMaxTotal(Integer.parseInt(properties.getProperty("maxTotal")));//设置活跃连接数jedisPoolConfig.setMaxIdle(Integer.parseInt(properties.getProperty("maxIdle")));//初始化jedisPool,设置主机,端口号jedisPool =new JedisPool(jedisPoolConfig,properties.getProperty("host"),Integer.parseInt(properties.getProperty("port")));}//提供获取连接方法public static Jedis getJedis(){return jedisPool.getResource();}
}

 16.输出结果:

 总结:使用redis缓存一些不经常发生变化的数据。
            数据库的数据一旦发生改变,则需要更新缓存。
            数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
            在service对应的增删改方法中,将redis数据删除。

注:若有侵权,请联系作者!

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/1167.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息