redis整合Springboot

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

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

1、Spring缓存注解

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

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

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

redis整合Springboot_第1张图片

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

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

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

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

redis整合Springboot_第2张图片

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

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

redis整合Springboot_第3张图片

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

redis整合Springboot_第4张图片 2、Redis集成Springboot

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

依赖添加

 
        
            org.springframework.boot
            spring-boot-starter-data-redis
        

配置文件

#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

redis整合Springboot_第5张图片

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

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

redis整合Springboot_第6张图片

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整合Springboot_第7张图片

 取redis时间

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

测试成功! 

redis整合Springboot_第8张图片

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);
}

你可能感兴趣的:(综合项目,spring,boot,redis,缓存)