spring cache采用redis的缓存方式实现

spring cache采用redis的缓存方式

1.简介

spring cache结合spring boot中的注解使用,能够缓存方法的返回值,缓存未变的情况下代替执行方法直接去读取缓存,提高处理速度。

2.相关注解

(1)@CacheConfig:主要用于配置该中会用到的一些共用的缓存配置,常用于配置缓存的集合名。

(2)@Cacheable:主要方法返回值加入缓存。同时在查询时,会先从缓存中取,若不存在才再发起对数据库的访问。

(3)@CachePut:配置于函数上,能够根据参数定义条件进行缓存,与@Cacheable不同的是,每次会真实调用函数,所以主要用于数据新增和修改操作上。

(4)@CacheEvict:配置于函数上,通常用在删除方法上,用来从缓存中移除对应数据

(5)@Caching:配置于函数上,组合多个Cache注解使用。

3.使用

3.1添加redis的maven依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <!-- 排除lettuce包,使用jedis代替-->
    <exclusions>
        <exclusion>
            <groupId>io.lettuce</groupId>
            <artifactId>lettuce-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- apache对redisTemplate的封装类-->
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-spring-redis</artifactId>
    <version>3.4.3</version>
</dependency>

3.2配置redis连接池

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    password:
    jedis:
      pool:
        min-idle: 10  #最小空闲连接数
        max-idle: 20  #最大空闲连接数
        max-active: 100  #最大连接数
        max-wait: 10000  #最大等待时间
  cache:
    type: redis
    redis:
      # 缓存过期时间
      time-to-live: 1d
      # key是否使用前缀
      use-key-prefix: true        

3.3创建配置类

@Configuration
public class RedisConfiguration {

    @Bean
    public RedisClient redisClient(RedisTemplate redisTemplate){
        //为key设置序列化器
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        //为value设置序列化器
        redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());

        redisTemplate.setHashKeySerializer(new StringRedisSerializer());

        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

        return new RedisClient(redisTemplate);
    }
     /**
     * 申明缓存管理器,会创建一个切面(aspect)并触发Spring缓存注解的切点(pointcut)
     */
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
        //缓存配置对象
        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) //设置key序列化器
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer())); //设置value序列化器
        return RedisCacheManager. builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory)).cacheDefaults(redisCacheConfiguration).build();
    }
}

3.4启动类启用Cache

xxxApplication启动类添加注解@EnableCaching

3.5启用缓存

在需要缓存的方法使用@Cacheable,删除缓存的地方使用@CacheEvict

注意:缓存的对象需要实现Serializable接口

参考文档

  1. spring cache学习(一):spring cache注解简单了解
  2. Spring Boot 集成Spring Cache 和 Redis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值