使用redis缓存数据

使用redis缓存数据

在service层,添加以下代码,先理解,后照搬,
如果我写的有点让你不理解,私聊我,我们一起探讨,本人乐于接受所有疑问。

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层调用


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);
    }
}

spring和redis的配置文件(spring-redis.xml)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--Jedis连接池的相关配置-->
    <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
        <!--新版是maxTotal,旧版是maxActive-->
        <property name="maxTotal">
            <value>200</value>
        </property>
        <property name="maxIdle">
            <value>50</value>
        </property>
        <property name="testOnBorrow" value="true"/>
        <property name="testOnReturn" value="true"/>
    </bean>

    <bean id="jedisPool" class="redis.clients.jedis.JedisPool">
        <constructor-arg name="poolConfig" ref="jedisPoolConfig" />
        <constructor-arg name="host" value="ip地址" />
        <constructor-arg name="port" value="6379" type="int" />
        <constructor-arg name="timeout" value="30000" type="int" />
    </bean>

</beans>

redis属性配置文件(redis.properties)

#redis.host=127.0.0.1
redis.host=localhost
redis.port=6379
redis.password=你的redis密码
redis.maxIdle=50
redis.maxTotal=100
redis.maxWaitMillis=3000
redis.testOnBorrow=true
redis.timeout=5000

链接一
链接二

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值