spring boot-16.使用redis做缓存

spring boot 自动配置了多种 缓存管理器,按照下面的顺序查找,如果容器中有相应的组件,则使用相应的缓存管理器。

  • Generic
  • JCache (JSR-107)
  • EhCache 2.x
  • Hazelcast
  • Infinispan
  • Redis
  • Guava
  • Simple

使用redis 作为缓存的步骤分为以下点

1.安装redis 服务

我使用的是docker 安装的redis,当然也可下载redis安装包,解压后运行。端口映射的6379

2.添加redis 依赖

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

3.配置redis 

我只配置了redis 的地址,端口默认,没有密码

 spring.redis.host=192.168.1.215

关于redis 的其他配置都在spring.redis 下配置

spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=30000

4.经过上面的几步,就可以使用缓存管理器了。但是由于默认使用的序列化器使用的是jdk自带的,序列化后数据为乱码,不方便查看。所以我们还配置自己的redisTemplate 和 CacheManager 去替换自动配置的组件

@Configuration
public class redisConfig2 {
    
       @Bean(name="redisTemplate")
        public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
     
            RedisTemplate<String, String> template = new RedisTemplate<>();
            RedisSerializer<String> redisSerializer = new StringRedisSerializer();
            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
            ObjectMapper om = new ObjectMapper();
            om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
            jackson2JsonRedisSerializer.setObjectMapper(om);
            template.setConnectionFactory(factory);
            template.setDefaultSerializer(jackson2JsonRedisSerializer);
            return template;
        }
       
       
        @Bean
        public CacheManager cacheManager(@SuppressWarnings("rawtypes")RedisTemplate redisTemplate) {
     
            RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
            cacheManager.setUsePrefix(true);
            cacheManager.setDefaultExpiration(3000);
            return cacheManager;
        } 
}

5.然后就可以使用注解进行缓存操作了

@Cacheable(cacheNames= {"dept"})
    public Department getDeptByID(Integer id) {
        log.info("查询"+id+"号员工");
        Department dept = departmentMapper.selectByPrimaryKey(id);
        return dept;
    }

6.如果不想在方法中添加注解而是希望在代码中进行缓存操作,则需要先注入我们的缓存管理器,然后获取缓存的名称,再进行相应操作

(1)注入缓存管理器

@Autowired
CacheManager manage;

(2)获取缓存,进行操作

Cache cache = manage.getCache("emp");
cache.put("01", emp);

猜你喜欢

转载自www.cnblogs.com/li-zhi-long/p/9548014.html