springboot切换为redis缓存

前言

  • SpringBoot默认开启的缓存管理器是ConcurrentMapCacheManager,创建的缓存实际上是ConcurrentMapCache,将缓存数据保存在ConcurrentHashMap中
  • 可以自由加入缓存中间件,如redis、memcache、enchache等,当导入jar包时,springboot会自动导入相关的bean,此时使用缓存注解即可将数据存入redis中。

步骤:

  1. 安装redis,开启redis。

在这里插入图片描述

我是在虚拟机上安装的redis,所以需要注意配置文件中的位置和端口,以及是否设置了密码等问题,还需要关闭防火墙,否则可能产生连接不上redis的问题。注意:端口号前面的ip应该为*号显示。如果你是在win上安装,直接开启即可。

redis.config中的注意事项

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

取消防火墙指令:

systemctl stop firewalld(默认)
systemctl disable firewalld.service(设置开启不启动)

连接redis成功

在这里插入图片描述

  1. 添加pom依赖

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-redis</artifactId>
            </dependency>
    
  2. 在application.properties中配置redis地址

    spring.redis.host=此处输入你的redis地址
    
  3. 此时已经启动了redis缓存,可以使用了,需要在service上添加对应的@Cachable等注解以及在核心启动类上添加@EnableCaching注解,详细请查看上一篇springboot缓存使用
    springboot缓存使用 。但为了方便查看,需要自定义RedisCacheManager,将对象序列化的方式由jdk变为json。

@Configuration
public class RedisConfig {

    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        // 分别创建String和JSON格式序列化对象,对缓存数据key和value进行转换
        RedisSerializer<String> strSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jacksonSeial =
                new Jackson2JsonRedisSerializer(Object.class);
        // 解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jacksonSeial.setObjectMapper(om);
        // 定制缓存数据序列化方式及时效
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofDays(1))
                .serializeKeysWith(RedisSerializationContext.SerializationPair
                        .fromSerializer(strSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair
                        .fromSerializer(jacksonSeial))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager
                .builder(redisConnectionFactory).cacheDefaults(config).build();
        return cacheManager;
    }

}
  1. 测试:

    • 查询后,执行了查询数据库的操作,并且将查询结果存入了redis中,并且结果显示为json格式

在这里插入图片描述

在这里插入图片描述

  • 第二次查询直接从redis中获取,不再执行sql语句。

总结:

  • 启动redis,导入redis的jar包并配置好地址即可在springboot中使用redis缓存
  • 注意自定义配置类将序列化的方式由jdk改为json
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值