redis整合Springboot

本文详细介绍了如何在Springboot项目中利用Spring缓存注解和Redis实现高效的缓存管理。通过@EnableCaching开启缓存,使用@Cacheable、@CacheEvict注解实现数据的自动缓存与清除。同时,展示了RedisTemplate的使用,如设置和获取过期时间,以及常见操作方法。此外,还提到了Redis在减少数据库压力和提高服务器性能方面的作用。

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

这篇文章适合Springboot增删改查很熟练的人

整合此老师的Redis教程:朝月余晖的个人空间_哔哩哔哩_Bilibili

1、Spring缓存注解

业务场景1:比如获取文章列表,当页面创建的时候就可以调用后端的数据,这时候要请求数据库。

但是!!!你用户一旦刷新页面了,那么文章列表的数据将重新请求后端接口,很没必要,同时也会施加服务器的压力。

配置Spring缓存,在Springboot项目入口配置@EnableCaching

再在获取列表的ServiceImpl方法上添加@Cacheable注解

含义是:当这个方法第一次被调用时,这个方法的返回值存入指定的缓存区域中

当这个方法第二次被调用时,首先是查看缓存中是否有这个key="'getProviderList'"

常用的按条件搜索也可以加缓存 

 业务场景2:当我删除其中一个文章,再获取所有文章的时候,获取的居然还是原来的文章(因为是在取缓存),这里就需要清除缓存

在ServiceImple删除方法上面添加删除缓存的注解@CacheEvict

你也可以清除所有缓存 list和byid啥的,因为删除一个文章也会影响其他的缓存

 2、Redis集成Springboot

这些Spring自带的缓存注解确实可以让数据请求次数减少很多,而且缓存是存在服务器之中,因此会给这个服务器带来很大的压力,所以引出了为啥要用redis,把redis配置在指定一台服务器上。

依赖添加

 <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

配置文件

#redis
spring.cache.type=redis
#缓存超时时间
spring.cache.redis.time-to-live=60000 
#是否缓存空值
spring.cache.redis.cache-null-values=false

spring.redis.host=xxx.xxx.xxx.xxx
#Redis服务器连接端口
spring.redis.port=6379

Postman测试获取http://localhost:9000/comment/all?pageNum=1&pageSize=4

在redis里直接存入这个结果,如果出现乱码,那么就是需要序列化

3、RedisTemplate的使用

可以在方法里随意进行个性化存储,比如一个订单支付时间只有30分钟,这时候你就要有个30分钟倒计时,那么可以让redis设置订单id30分钟,只需要写下面这一句即可,其他语句忽略,redisTemplate.opsForValue().set("order_id",1232324, Duration.ofMinutes(30L));

 @Autowired
    RedisTemplate redisTemplate;



//        订单id存在redis,存30分钟
redisTemplate.opsForValue().set("order_id",1232324, Duration.ofMinutes(30L));

 取redis时间

//        获取订单剩余时间
        Long expire=redisTemplate.getExpire(order_id);

测试成功! 

4、RedisTemplate的常用方法

//    删除key
public void delete(String key){
    redisTemplate.delete(key);
}

//    删除多个key
public void deleteKey (String ...keys){
    redisTemplate.delete(keys);
}

//    指定key的失效时间
public void expire(String key,long time){
    redisTemplate.expire(key,time,TimeUnit.MINUTES);
}

//    根据key获取过期时间
public long getExpire(String key){
    Long expire = redisTemplate.getExpire(key);
    return expire;
}

//    判断key是否存在
public boolean hasKey(String key){
    return redisTemplate.hasKey(key);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江河地笑

实践是检验真理的唯一标准

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值