发表于: 2020-09-05 22:11:39

0 2226


修改了前期的缓存代码


用try/catch的原因是 

获取缓存代码

如果这个缓存代码没有结果 

rs是int类型的   没法用if  判断空值, 判断数字大小又不符合业务

所以用try/catch,倒是能运行,但很奇怪。


后面想到还有包装类Integer这个东西


就修改成下面这样, 这样就能判断返回int类型缓存值是否为空了

@Override
public int MemCountStudent() {
   
   Integer rs = (Integerclient.get("MemCountStudent");
   
   if (rs!=null){
       logger.info("有缓存,缓存为+ rs + "现在开始返回缓存");
       return rs;

   }else{
       //如果缓存为空   返回缓存数据
       logger.info("没有缓存,现在从数据库查询数据");
       int rss = studentMapper.countStudent();
       logger.info("从数据库中查询处的数据为+ rss);

       try {
           logger.info("现在开始把数据放入缓存");
           boolean state = client.set("MemCountStudent"rss);
           logger.info("添加新缓存是否成功+ state);
           return rss;
       }catch (Exception e){
           logger.info(e.toString());
           return rss;
       }

   }

完成Spring+redis的代码整合


redis.properties  文件

#最大能够保持idel状态的对象数
redis.maxIdle=800
redis.minIdle=100

#当池内没有返回对象时,最大等待时间
redis.maxWaitMillis=3000

#最大活动对象数
redis.maxTotal=128
redis.host=127.0.0.1
redis.port=6379

#客户端超时时间
redis.timeout=0
#是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
redis.testOnBorrow=true  
#在空闲时检查有效性默认false
redis.testWhileIdle=true  
#是否进行有效性检查
redis.testOnReturn=true
       
#没密码就注释掉
#redis.password=123456


spring+redis文件

<?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-3.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package="com"/>
   <context:property-placeholder location="classpath:redis.properties" ignore-unresolvable="true"/>
   <!--设置数据池-->
   <bean id="poolConfig"  class="redis.clients.jedis.JedisPoolConfig">
       <property name="maxIdle" value="${redis.maxIdle}"></property>
       <property name="minIdle" value="${redis.minIdle}"></property>
       <property name="maxTotal" value="${redis.maxTotal}"></property>
       <property name="maxWaitMillis" value="${redis.maxWaitMillis}"></property>
       <property name="testOnBorrow" value="${redis.testOnBorrow}"></property>
   </bean>
   <!--链接redis-->
   <bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
       <property name="hostName" value="${redis.host}"></property>
       <property name="port" value="${redis.port}"></property>
<!--        <property name="password" value="${redis.password}"></property>-->
       <property name="poolConfig" ref="poolConfig"></property>
   </bean>

   <!-- redis 序列化策略 ,手动指定 key 采用String序列化策略 -->
   <bean id="stringSerializer" class="org.springframework.data.redis.serializer.StringRedisSerializer"/>

   <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate" >
       <property name="connectionFactory" ref="connectionFactory"/>
       <property name="keySerializer" ref="stringSerializer"/>
       <!-- 开启事务,可以通过transcational注解控制 -->
       <property name="enableTransactionSupport" value="true"/>
   </bean>

</beans>


applicationContext.xml  引入spring+redis文件

<!--    引入redis.xml文件-->
<import resource="classpath:spring-redis.xml" />



实现类中的代码

@Override
public int RedisCountStudent() {

   Integer rs =(IntegerredisTemplate.opsForValue().get("RedisCountStudent");

   if(rs!= null){

       logger.info("有缓存,缓存为+ rs + "现在开始返回缓存");
       return rs;

   }else{

       //如果缓存为空   返回缓存数据
       logger.info("没有缓存,现在从数据库查询数据");
       int rss = studentMapper.countStudent();

       logger.info("从数据库中查询处的数据为+ rss);

       try {
           logger.info("现在开始把数据放入缓存");
           redisTemplate.opsForValue().set("RedisCountStudent",rss);
           logger.info("放入缓存成功");
       }catch (Exception e){
           logger.info(e.toString());
           logger.info("放入缓存失败!");
       }
       return rss;
   }
   }



List<studentstudent = (List<student>)redisTemplate.opsForValue().get("RedisStudent");
   logger.info("查询出的缓存值为+ student);

   if (student != null && student.size()>0) {
       logger.info("返回缓存");
       return student;

   else {

       logger.info("缓存为空,现在从数据库查询数据");
       List<studentstudents = studentMapper.allStudent();
       logger.info("从数据库中查询处的数据为+ students);

       try {
           logger.info("把数据放入缓存");
           redisTemplate.opsForValue().set("RedisStudent",students);
           logger.info("添加缓存成功");
       }catch (Exception e){
           logger.info(e.toString());
           logger.info("放入缓存失败!");
       }
       return students;
   }
}

把首页的jsp页面的所有数据都加上了缓存

//带缓存
@RequestMapping(value "/MemhomePage"method = RequestMethod.GET)
public String MemallStudent(Model model) {

   try {
       List<studentstudents = studentService.MemAllStudent();
       List<companycompany = companyService.MemAllCompany();
       int countStudent = studentService.MemCountStudent();
       int countCompany = companyService.MemCountCompany();
       int countSatisfiedSalary = studentService.MemCountSatisfiedSalary();

       model.addAttribute("students"students);
       model.addAttribute("company"company);
       model.addAttribute("countStudent"countStudent);
       model.addAttribute("countCompany"countCompany);
       model.addAttribute("countSatisfiedSalary"countSatisfiedSalary);
       return "homePage";

   catch (Exception e) {
       return "index";
   }
}


5个方法

companyServiceImpl  俩

@Override
public List<companyMemAllCompany(){

   //取出所有学生的缓存
   List<companycompany = (List<company>) client.get("AllCompany");
   logger.info("查询出的缓存值为+ company);

   if (company != null) {
       logger.info("返回缓存");
       return company;

   else {

       logger.info("缓存为空,现在从数据库查询数据");
       List<companycompanys = companyMapper.allCompany();
       logger.info("从数据库中查询处的数据为+ companys);

           logger.info("把数据放入缓存");
           boolean state = client.set("AllCompany",companys);
           logger.info("添加新缓存是否成功+ state);

       return companys;
   }
}


//带缓存的countCompany
@Override
public int MemCountCompany() {

   try{
       int rs = (intclient.get("countCompany");
       logger.info("有缓存,缓存为"+rs+"现在开始返回缓存");
       return rs;

   }catch (Exception e){

       //如果缓存为空   返回缓存数据
       logger.info("没有缓存,现在从数据库查询数据");
       int rss = companyMapper.countCompany();
       logger.info("从数据库中查询处的数据为+ rss);

       logger.info("现在开始把数据放入缓存");
       boolean state = client.set("countCompany"rss);
       logger.info("添加新缓存是否成功+ state);
       return rss;
   }
}



studentServiceImpl  仨

//不带缓存的countStudent
@Override

public int countStudent() { 

return studentMapper.countStudent()}


//带缓存的countStudent
@Override
public int MemCountStudent() {

   try{
   int rs = (intclient.get("countStudent");
   logger.info("有缓存,缓存为"+rs+"现在开始返回缓存");
   return rs;

   }catch (Exception e){

       //如果缓存为空   返回缓存数据
       logger.info("没有缓存,现在从数据库查询数据");
       int rss = studentMapper.countStudent();
       logger.info("从数据库中查询处的数据为+ rss);

       logger.info("现在开始把数据放入缓存");
       boolean state = client.set("countStudent"rss);
       logger.info("添加新缓存是否成功+ state);
       return rss;
   }
}

//不带缓存
@Override
public int countSatisfiedSalary() {
   return studentMapper.countSatisfiedSalary();
}

//带缓存
@Override
public int MemCountSatisfiedSalary() {
   try{
       int rs = (intclient.get("countSalary");
       logger.info("有缓存,缓存为"+rs+"现在开始返回缓存");
       return rs;

   }catch (Exception e){

       //如果缓存为空   返回缓存数据
       logger.info("没有缓存,现在从数据库查询数据");
       int rss = studentMapper.countSatisfiedSalary();
       logger.info("从数据库中查询处的数据为+ rss);

       logger.info("现在开始把数据放入缓存");
       boolean state = client.set("countSalary"rss);
       logger.info("添加新缓存是否成功+ state);
       return rss;
   }
}

//不带缓存
@Override
public List<studentallStudent() {
   return studentMapper.allStudent();
}


//带缓存
@Override
public List<studentMemAllStudent() {

   //取出所有学生的缓存
   List<studentstudent = (List<student>) client.get("student");
   logger.info("查询出的缓存值为+ student);

   if (student != null) {
       logger.info("返回缓存");
       return student;

   else {

       logger.info("缓存为空,现在从数据库查询数据");
       List<studentstudents = studentMapper.allStudent();
       logger.info("从数据库中查询处的数据为+ students);

       try {
           logger.info("把数据放入缓存");
           boolean state = client.set("student"students);
           logger.info("添加新缓存是否成功+ state);
       }catch (Exception e){
           e.printStackTrace();
       }
       return students;
   }
}


今日问题 暂无


返回列表 返回列表
评论

    分享到