SpringBoot 2.x 整合redis 作为缓存

本文详细介绍了如何在SpringBoot2.x项目中整合Redis作为缓存,包括安装配置Redis,引入依赖,编写配置文件,以及在接口方法中使用缓存注解。探讨了@Cacheable、@CachePut和@CacheEvict三种缓存注解的使用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot 2.x 整合 redis 作为缓存使用

SpringBoot对Redis进行了封装,使用起来十分方便。这里使用的SpringBoot版本为2.2.5.RELEASE。

1、安装redis并进行配置

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(highavailability)。

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
Redis 的中文网站

2、在项目中引入redis依赖编写配置文件

a. 引入redis 启动器
        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
b. 在 application.yml 编写redis 端口 地址 连接池相关
spring:
  redis:
    host: 192.168.0.106
    port: 6379
    jedis:
      pool:
        max-active: 20
    timeout: 1800000
    lettuce:
      pool:
        max-active: 20
        max-wait: -1
        #最大阻塞等待时间(负数表示没限制)
        max-idle: 5
        min-idle: 0
c.引入Redis的starter 我们是用一个配置类 继承 CachingConfigurerSupport
@Configuration //声明这是一个配置类
@EnableCaching //开启缓存
public class RedisConfig extends CachingConfigurerSupport {

    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();
        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
                .build();
        return cacheManager;
    }

3、在接口方法中添加缓存

a. Spring Boot缓存注解
I 缓存@Cacheable

在这里插入图片描述

根据方法对其返回结果进行缓存,下次请求时,如果缓存存在,则直接读取缓存数据返回;如果缓存不存在,则执行方法,并把返回的结果存入缓存中。
第一次查询,首先查询数据库,把数据库查询数据返回,并且返回数据放到缓存中
第二次查询,查询缓存,发现缓存有数据,直接返回
一般用在查询方法上。

II 缓存@CachePut

在这里插入图片描述

使用该注解标志的方法,每次都会执行,并将结果存入指定的缓存中。其他方法可以直接从响应的缓存中读取缓存数据,而不需要再去查询数据库。
一般用在新增方法上。

III 缓存@CacheEvict

在这里插入图片描述
使用该注解标志的方法,会清除指定的缓存。
一般用在更新或删除方法上。

b.接口实现方法上添加注解
@Service
public class CrmBannerServiceImpl extends ServiceImpl<CrmBannerMapper, CrmBanner> implements CrmBannerService {

    /**
     * 前台查询所有
     *
     * @return list
     */
    @Override
    @Cacheable(cacheNames = "banner", key = "'selectIndexList'")  //将数据放入缓存
    public List<CrmBanner> selectAllBannerInfo() {

        QueryWrapper<CrmBanner> crmWrapper = new QueryWrapper<>();

        crmWrapper.orderByAsc("id");

        crmWrapper.last("LIMIT 4");

        return this.baseMapper.selectList(null);
    }

c.启动redis即可

在这里插入图片描述
启动成功

在这里插入图片描述

4、关于Redis 相关问题

a. 无法连接
I 保护模式没关闭

出现以下错误
在这里插入图片描述
在redis目录中找到redis.windows.conf 中编辑配置文件 找到protected-mode yes 将 yes 改为 no
在这里插入图片描述
在这里插入图片描述

II 服务未启动

找到并打开即可解决问题

在这里插入图片描述

b.以上是Windows版本 下面说说Liunx版本
I Liunx 下如何启动

启动图片来源于网络
图片来源于网络

II 关闭liunx防火墙

centos6防火墙操作

1. service命令
关闭防火墙:service iptables stop
开启防火墙:service iptables start
重启防火墙:service iptables restart
查看防火墙状态:service iptables status
2. 通过:/etc/init.d/iptables 进行操作
关闭防火墙:/etc/init.d/iptables stop(这是临时关闭,关闭的是当前运行的防火墙,
重启之后防火墙又会启动,因为它是开机自启动的,它相当于/etc/init.d/iptables start)
查看防火墙状态:/etc/init.d/iptables/status
3. 需要改为开机不启动,使用chkconfig命令
永久关闭防火墙:chkconfig iptables off
永久开启防火墙:chkconfig iptables on
查看状态:chkconfig --list iptables
4. 找到redis配置文件, 注释一行配置
# bind 127.0.0.1

OK以上就这么多 具体还需要大家结合自己的业务操作~ Wiki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值