redis缓存未生效

redis缓存未生效

pom依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

properties:

server.port=8083

spring.datasource.name=imooc_mall
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/imooc_mall?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

mybatis.mapper-locations=classpath:mappers/*.xml

spring.redis.host=192.168.23.144
spring.redis.port=6379
spring.redis.password=123456

启动类:

@SpringBootApplication
//basePackages没有双引号
@MapperScan(basePackages="com.imooc.mall.model.dao")
@EnableSwagger2
@EnableCaching
//启动类必须得放在包的最外面
public class ImoocshopApplication {

serviceimpl:

@Cacheable(value = "listCategoryForcustomer")   //在哪个方法上使用这个缓存
public List<CategoryVo> listCategoryForcustomer(){
    ArrayList<CategoryVo> categoryVos=new ArrayList<>();
    //递归调用
    recursionfindcaterories(categoryVos,0);
    return categoryVos; //返回一个列表
}

redis配置文件:

package com.imooc.mall.model.config;

import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.connection.RedisConnectionFactory;

import java.time.Duration;

/**
 * redis主要配置缓存时间
 */
@Configuration
@EnableCaching
public class REdisConfig {
    @Bean
    public RedisCacheManager redisCacheManager(RedisConnectionFactory redisConnectionFactory){

        //固定配置格式:
        RedisCacheWriter redisCacheWriter=RedisCacheWriter.lockingRedisCacheWriter(redisConnectionFactory);

        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
        //配置延迟时间30s
        redisCacheConfiguration.entryTtl(Duration.ofSeconds(30));

        RedisCacheManager redisCacheManager = new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);

        return redisCacheManager;
    }



}

实体类:

package com.imooc.mall.model.pojo;

import java.io.Serializable;
import java.util.Date;

public class Category implements Serializable {
    private Integer id;

    private String name;

    private Integer type;

    private Integer parentId;

    private Integer orderNum;

    private Date createTime;

    private Date updateTime;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public Integer getParentId() {
        return parentId;
    }

    public void setParentId(Integer parentId) {
        this.parentId = parentId;
    }

    public Integer getOrderNum() {
        return orderNum;
    }

    public void setOrderNum(Integer orderNum) {
        this.orderNum = orderNum;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}

虚拟机redis也启动了:

https://img1.sycdn.imooc.com//climg/64436a430924941604980190.jpg

打断点调试每次都会访问到serviceimpl里面的实现方法:redis缓存未生效是为啥

不明白为啥,感觉像是没启动redis缓存一样

控制台未报任何错误

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小尤 2023-04-23 10:09:29

同学你好,1、建议同学使用课程源码试一下,查看是否存在对应问题。

2、同学也可以根据老师的演示步骤尝试打个断点试一下。同学也可以查看idea控制台查看是否存在异常。

祝学习愉快!

  • 提问者 10358yyds #1

    就是打断点调试发现缓存为生效,idea未报任何异常,我觉得是redis连接失败或者为启动redis,这个如何看是否启动redis呢

    2023-04-24 23:43:05
  • 好帮手慕小尤 回复 提问者 10358yyds #2

    同学你好,1、测试同学代码是没有问题的,同学尝试在下方位置打一个断点。第一次执行会停到这里,然后点击第二张图中的三角,然后再访问接口就不会停到这个断点处就代表缓存生效了(超过30秒缓存会失效)。

    https://img1.sycdn.imooc.com//climg/6447347709343b7f04780160.jpg

    https://img1.sycdn.imooc.com//climg/6447349909ed8c2e01600226.jpg

    2、也有可能是没有连接上redis,请问同学redis是否有设置密码,如果没有,则建议同学去除password的值。

    3、同学的redis是在虚拟机中,可能是因防火墙没有连接到redis,建议同学关闭防火墙试一下。同学也可以使用本地redis试一下,查看是否可以成功缓存。

    systemctl stop firewalld  :关闭防火墙

    4、查看同学的虚拟机是已经开启了redis

    https://img1.sycdn.imooc.com//climg/644735e809385ae703710177.jpg

    祝学习愉快!

    2023-04-25 10:07:57
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师