Redis use cached data
In the service layer, add the following code to be understood that, after the copy,
If I write a bit so that you do not understand, I whisper, we explore together, I am willing to accept all doubt.
import cn.hp.jedis.dao.ProvinceDao;
import cn.hp.jedis.dao.ProvinceDaoImpl;
import cn.hp.jedis.domain.Province;
import cn.hp.jedis.utils.JedisPoolUtils;
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缓存
*/
@Override
public String findJson() {
//1.从redis取出数据(首先拿到jedis链接)
Jedis jedis = JedisPoolUtils.getJedis(); //下面有JedisPoolUtils工具类代码。链接一
//2.从jedis中得到 json数据
String json = jedis.get("province"); //从redis中查询是否缓存过数据
//3.判断json是否存在,若不存在 则先请求网络(将请求成功数据缓存到redis)
if (json == null||json.length()==0){
System.out.println("首次从mysql查询数据,redis没有缓存。。。");
//3.1先从mysql数据库查询数据
List<Province> list = provinceDao.findAll(); //从数据库查询数据并存入List集合中
ObjectMapper objectMapper = new ObjectMapper(); //List转json数据 具体看链接二
try {
json = objectMapper.writeValueAsString(list); //List转json数据 具体看链接二
} catch (JsonProcessingException e) {
e.printStackTrace();
}
jedis.set("province",json); //向redis中添加缓存数据
jedis.close(); //关闭池链接
}else{
System.out.println("可以取出json数据,使用缓存数据...");
}
return json;
}
}
servlet layer calls
import cn.hp.jedis.service.ProvinceService;
import cn.hp.jedis.service.ProvinceServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ProvinceServlet extends HttpServlet {
//调用上面的service层
private ProvinceService provinceService = new ProvinceServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String json = provinceService.findJson(); //调用service的findJson() 方法
System.out.println(json);
//将json数据响应到前台 (html,jsp)
resp.setContentType("application/json;charset=utf-8");//指定当前响应数据的格式为json 并且指定编码为utf-8
resp.getWriter().write(json);//直接将字符串响应到客户端
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}