11.8 redis案例(使用redis做缓存)
案例需求:
1、提供index.html页面,页面中有一个省份,下拉列表
2、当加载完页面后,发送ajax请求,加载所有省份
步骤:
1、用mysql数据库的方式完成查询,并显示到index.html页面上:
servlet代码:
//1、调用service查询
ProvinceService pService=new ProvinceServiceImpl();
List<Province> provinces=pService.findAll();
//2、序列化list为json
ObjectMapper mapper=new ObjectMapper();
String json=mapper.writeValueAsString(provinces);
//3、响应结果
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
index.html代码:
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="js/jquery.min.js" type="text/javascript" charset="utf-8"></script>
<script>
$(function(){
$.get("FindProvinceServet",{},function(data){
//[{"id":1,"name":"北京"},{"id":2,"name":"上海"},{"id":3,"name":"广州"},{"id":4,"name":"陕西"}] 获取出来的是数组形式
//1、获取select
var province=$("#province");
//2.遍历json 数组
$(data).each(function(){
//3、创建<option>
var option="<option name='"+this.id+"'>"+this.name+"</option>"
//4、调用select的append追加option
province.append(option);
});
});
});
</script>
</head>
<body>
<select id="province">
<option>---请选择省份---</option>
</select>
</body>
注:
1、使用ajax返回的data数据,用jq的方式遍历,jq对象.each(function())
2、创造一个标签直接拼字符串:var option=""+this.name+""
2、用redis优化:
注意:使用redis缓存一些不经常发生变化的数据。
数据库的数据一旦发生变化,就需要更新缓存。
即:当数据库的表执行增删改查的相关操作时,需要将redis缓存数据清空,再次存入
因为省份不是经常变化的数据,每次从数据库中读取太浪费资源,所以考虑redis缓存思想。
在service和dao之间创建一个redis缓存:
如果缓存中没有数据:
1.1从数据库中查询数据
1.2将数据缓存到redis
1.3返回数据
如果缓存中有数据:
2.1直接返回数据
(注意:测试时一定不要忘了开启redis的服务器!!!!!!)
//在ProvinceServiceImpl中新增了一个函数:
//此函数返回的json字符串
public String findAllJson() {
// TODO Auto-generated method stub
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> provinces=pd.findAll();
//转换成json字符串格式
ObjectMapper mapper=new ObjectMapper();
try {
province_json = mapper.writeValueAsString(provinces);
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//将数据存储到redis中
jedis.set("province", province_json);
//关闭连接
jedis.close();
}else {
System.out.println("redis中有数据,查询数据库。。。");
}
return province_json;
}
servlet中直接调用此函数就可以了:
//1、调用service查询
ProvinceService pService=new ProvinceServiceImpl();
String json=pService.findAllJson();
//3、响应结果
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);