SpringBoot如何使用Redis做缓存


写在前面

Spring Boot 系列文章源于 深入实践Spring Boot 一书(感谢作者)。时过境迁,我使用了更新的版本来学习。写下系列的博客,一则为了加强记忆,便于回顾,再则也希望帮助到正在学习 Spring Boot 的同学。当然,这也算给自己列下了学习计划吧!


使用 Redis 做缓存,一方面可以像前文所写的那样,另一方面,可以使用注解的方式来调用


1. 使用 Spring Cache 注解

如果 Redis 可用并已配置,则自动配置 RedisCacheManager。通过设置spring.cache.cache-names,可以在启动时创建额外的缓存。可以使用 spring.cache.redis.* 配置缓存属性。例如,下面的配置创建了cache1和cache2缓存,缓存的存活时间为10分钟

spring:
 cache:
  cache-names: cache1,cache2
  redis:
   time-to-live: 10s
   key-prefix: springtest

注意:如果在这里指定了 key-prefix ,则可能会覆盖掉注解指定前缀值(我测试的结果是这样)。

启动缓存配置类:

@Configuration
@EnableCaching
public class CustomRedisCacheConfiguration extends CachingConfigurerSupport {

}

当然,你也可以通过添加自己的 RedisCacheConfiguration Bean 来完全控制配置。在上面的类中加入以下代码:

    @Autowired
    private RedisConnectionFactory redisConnectionFactory;

    @Bean
    public CacheManager cacheManager() {
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
        CacheManager cacheManager = new RedisCacheManager(RedisCacheWriter.lockingRedisCacheWriter(redisConnectionFactory),redisCacheConfiguration.entryTtl(Duration.ofDays(2)));
        return cacheManager;
    }

Service 类:

@Service
public class UserService {

    @Cacheable(cacheNames = {"UserService:findById:id","UserService:findById2:id"})
    public String findById(String id) {
        System.out.println("执行数据库调用");
        return "获取到结果";
    }
}

@Cacheable 为存取缓存,@CachePut 为修改缓存,CacheEvict 为删除缓存,各个注解中的 value 参数是一个 key 的前缀,并由 keyGenerator 按一定的规则生成一个唯一标识。

测试如下:

	@Test
    public void findById(){
        String result = userService.findById("nothing");
        System.out.println(result);
    }

观察 redis 中存在的key 以及其 ttl 值。

2. 使用 RedisTemplate

使用注解只能对简单对象进行系列化操作,对于像实体 User 这样的包含了一定关系的复杂对象,或其他集合、列表对象等,就不能使用简单注解的方法来实现了。

首先从 Redis 读取,如果存在,则不再到 Mysql 中读取,如果不存在再到 Mysql 读取,并将读取的结果暂时保存在 Redis 中。

具体的代码就不再写了,可以参考另一篇 Spring Boot 使用 Redis

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值