Jedis案例
需求:
1.提供index.html页面,页面中有一个省份 下拉列表。
2.当页面加载完成后发送ajax请求,加载所有省份。
注意:使用redis缓存一些不经常发生变化的数据。
- 数据库的数据一旦发生改变,则需要更新缓存。
- 数据库的表执行 增删改的相关操作,需要将redis缓存数据情况,再次存入
- 在service对应的增删改方法中,将redis数据删除。
分析:
页面效果:
代码:
1.前台页面:
页面加载完成时使用ajax
发送get请求,并接受返回来的省份数据(json)
显示到下拉列表中。
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Ajax & Redis</title>
<script src="js/jquery-3.4.1.min.js"></script>
<script>
$(function () {
$.get("provinceServlet",{},function (data) {
//1.获取select下拉列表
var select=$("#province");
//2.遍历Json数组
$(data).each(function () {
//3.创建<option>
var option="<option name='"+this.id+"'>"+this.name+"</option>"
//4.追加<option>
select.append(option);
})
})
})
</script>
</head>
<body>
<select id="province">
<option>---请选择省份---</option>
</select>
</body>
</html>
2.前台Servlet
接受ajax
的get请求—并调用service
获取json
数据------返回json
package com.chif.web.Servlet;
import ...
@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// //1.调用Service查询获取list集合
// ProvinceService service=new ProvinceServiceImpl();
// List<Province> list = service.findAll();
// //2.序列化list为Json
// ObjectMapper mapper=new ObjectMapper();
// String json = mapper.writeValueAsString(list);
//
// //3.响应结果
// response.setContentType("application/json;charset=UTF-8");
// response.getWriter().write(json);
//1.调用Service查询获取Json字符串
ProvinceService service=new ProvinceServiceImpl();
String json = service.findAllJson();
//2.响应结果
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);
}
}
3.Provinceservice实现类
- 查询
redis
缓存 - 如果没有缓存,查询数据库,转为
json
存入缓存 - 返回
json
package com.chif.service.impl;
import com.chif.dao.*;
import com.chif.entity.Province;
import com.chif.service.ProvinceService;
import com.chif.utils.JedisPoolUtils;
import com.fasterxml.jackson.*;
import redis.clients.jedis.Jedis;
import java.util.List;
public class ProvinceServiceImpl implements ProvinceService {
private ProvinceDao dao=new ProvinceDaoImpl();
/**
* 查询省份信息list集合
* @return
*/
@Override
public List<Province> findAll() {
return dao.findAll();
}
/*
1.查询redis缓存
2.如果没有缓存,查询数据库,转为json存入缓存
*/
@Override
public String findAllJson() {
Jedis jedis = JedisPoolUtils.getJedis();
String province_json = jedis.get("province");
if (province_json==null || province_json.length()==0){
//redis中没有缓存
System.out.println("redis中没有有缓存,查询数据库。。。");
//查询数据库
List<Province> list = dao.findAll();
//list转为json字符串
ObjectMapper mapper=new ObjectMapper();
try {
province_json = mapper.writeValueAsString(list);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
//存入redis缓存
jedis.set("province",province_json);
} else {
//redis中有缓存
System.out.println("redis中有缓存。。。");
}
return province_json;
}
}
4.Provincedao实现类
查询mysql
数据库返回list
集合
package com.chif.dao.impl;
import com.chif.dao.ProvinceDao;
import com.chif.entity.Province;
import com.chif.utils.JDBCUtils;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import java.util.List;
public class ProvinceDaoImpl implements ProvinceDao {
private JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
@Override
public List<Province> findAll() {
String sql="select * from province";
//执行sql
List<Province> list = template.query(sql, new BeanPropertyRowMapper<Province>(Province.class));
return list;
}
}