Jedis案例:
案例的需求:
1.提供index.html页面,页面中有一个省份下拉列表
2.当页面加载完成之后 发送ajax请求,加载所有省份
缓存思想:
1.先从redis查询数据
如果没有:
1.从数据库中查询
2.将数据存入redis
如果有:
1.直接从redis获取数据
注意:使用redis缓存一些不经常发生变化的数据
数据库的数据一旦发生改变,需要清空redis缓存,重新存入数据
在service对应的修改方法中,将redis的数据清除
依赖Jar包
Jedis配置:jedis.properties
host=127.0.0.1
port=6379
maxTotal=50
maxIdle=10
mysql配置:druid.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day23
username=root
password=root
initialSize=5
maxActive=10
maxWait=3000
对应的文件
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请求,加载所有省份数据
// 为什么url不写虚拟路径也可以找到servlet
$.get("provinceServlet", {}, function(data) {
// 获取select
var province = $("#province");
// 2.遍历数组
for (var i = 0; i < data.length; i++) {
// 创建option,调用select的append方法
var option = "<option name='"+data[i].id+"'>"+data[i].name+"</option>";
// 调用select的append方法追加option
province.append(option);
}
});
});
</script>
</head>
<body>
<select id="province">
<option value="">--请选择省份--</option>
</select>
</body>
</html>
provinceServiceImpl:
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 {
// 声明dao
private ProvinceDao provinceDao = new ProvinceDaoImpl();
@Override
public List<Province> findAll() {
return provinceDao.findAll();
}
/**
* 使用redis
* @return
*/
@Override
public String findAllJson() {
// 1.先从redis中查询数据
// 获取redis客户端连接
Jedis jedis = JedisPoolUtils.getJedis();
String province_json = jedis.get("province");
// province_json是否为null
if (province_json == null ||
province_json.length() == 0) {
System.out.println("reids中无数据");
// 从数据库查询
List<Province> ps = provinceDao.findAll();
// 将list序列化为json
ObjectMapper mapper = new ObjectMapper();
try {
province_json = mapper.writeValueAsString(ps);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
// 将json数据存入redis
jedis.set("province", province_json);
// 归还连接到连接池
jedis.close();
}
return province_json;
}
}
ProvinceServlet:
package cn.itcast.web.servlet;
import cn.itcast.domain.Province;
import cn.itcast.service.ProvinceService;
import cn.itcast.service.impl.ProvinceServiceImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
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;
import java.util.List;
//@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.调用service查询
// ProvinceService provinceService = new ProvinceServiceImpl();
// List<Province> list = provinceService.findAll();
// 2.序列化list为json
// ObjectMapper mapper = new ObjectMapper();
// String json = mapper.writeValueAsString(list);
ProvinceService provinceService = new ProvinceServiceImpl();
// 获取缓存的方法
String json = provinceService.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);
}
}