Redis 案例
程序员文章站
2022-04-29 23:25:46
...
一、案例需求
- 提供
index.html
页面,页面中有一个省份 下拉列表 - 当 页面加载完成后 发送
ajax
请求,加载所有省份
需要注意:redis 常用于缓存一些不经常发生变化的数据
* 数据库的数据一旦发生改变,则需要更新缓存。
* 数据库的表执行增删改的相关操作,需要将redis缓存数据情况,再次存入
* 在service对应的增删改方法中,将redis数据删除。
二、代码
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Redis</title>
<script src="js/jquery-3.3.1.min.js"></script>
<script>
$(function () {
//发送 Ajax 请求,加载所有省份数据
$.get("provinceServlet", {}, function (data) {
//获取 select
var province = $("#province");
//遍历 json 数组
$(data).each(function () {
// 创建 option
var option = "<option name='" + this.id + "'>" + this.name + "</option>";
// 调用 select 的 append 追加 option
province.append(option)
})
})
})
</script>
</head>
<body>
<select id="province">
<option>--请选择省份--</option>
</select>
</body>
</html>
ProvinceServlet.java
当首次访问时,不存在缓存数据,所以需要调用数据库查询,然后将查询结果存入 redis,下次查询则直接调用 redis 缓存
@WebServlet("/provinceServlet")
public class ProvinceServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 调用 service 查询
ProvinceServiceImpl service = new ProvinceServiceImpl();
String json = service.findAllJson();
// 响应结果
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);
}
}
这里同样使用了三层架构,界面层,业务逻辑层,数据访问层。
业务逻辑层 ProvinceDaoImpl.java
public class ProvinceServiceImpl implements ProvinceService {
// 声明 dao,直接处理数据库的操作
ProvinceDao dao = new ProvinceDaoImpl();
/*
使用 redis 缓存
*/
@Override
public String findAllJson() {
// 先从 redis 中查询数据
// 获取 redis 客户端连接
Jedis jedis = JedisPoolUtils.getJedis();
String province = jedis.get("province");
// 判断 province 数据是否为 null
if (province == null || province.length() == 0) {
// redis 中没有数据
System.out.println("redis 中没有数据,查询数据库。。。");
List<Province> list = dao.findAll();
// 将 list 序列化为 json
ObjectMapper mapper = new ObjectMapper();
try {
province = mapper.writeValueAsString(list);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
// 将 json 数据存入 redis
jedis.set("province", province);
// 归还连接
jedis.close();
} else {
System.out.println("redis 中有数据,查询缓存。。。");
}
return province;
}
}
上一篇: MySQL无法启动的解决办法示例分享
下一篇: 案例-实现-redis缓存