SpringBoot 整合 Redis

1.导入pom依赖

<!--redis-->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!--lettuce-->
<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-pool2</artifactId>
</dependency>

2.配置properties文件

# REDIS (RedisProperties)
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址 如果是docker容器选虚拟机主机host:端口port
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=xxxx
# 连接超时时间(毫秒)
spring.redis.timeout=5000ms

# 连接池最大连接数(使用负值表示没有限制)
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1ms
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0

3.编写配置类

@Configuration
public class RedisConfig {
   @Value("${spring.cache.redis.time-to-live}")
   private Duration timeToLive;
   @Resource
   private RedisConnectionFactory redisConnectionFactory;

   @Bean
   public StringRedisSerializer stringRedisSerializer(){
       return new StringRedisSerializer();
  }
   @Bean
   public StringRedisTemplate stringRedisTemplate(){
       StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
       stringRedisTemplate.setConnectionFactory(redisConnectionFactory);//工厂必须加
       stringRedisTemplate.setEnableTransactionSupport(true);
       return stringRedisTemplate;
  }
   @Bean
   public Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer(){
       Jackson2JsonRedisSerializer<Object> jsonRedisSerializer=new Jackson2JsonRedisSerializer<>(Object.class);
       ObjectMapper objectMapper=new ObjectMapper();
       objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
       objectMapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL);
       jsonRedisSerializer.setObjectMapper(objectMapper);
       return jsonRedisSerializer;
  }
   @Bean
   public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
       RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
       redisTemplate.setConnectionFactory(redisConnectionFactory);//工厂必须加
       redisTemplate.setKeySerializer(stringRedisSerializer());
       redisTemplate.setValueSerializer(jackson2JsonRedisSerializer());
       redisTemplate.setHashKeySerializer(stringRedisSerializer());
       redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer());
       //开启事务管理
       redisTemplate.setEnableTransactionSupport(true);
       redisTemplate.afterPropertiesSet();
       return redisTemplate;
  }
   @Bean
   public CacheManager cacheManager(RedisConnectionFactory factory) {
       RedisSerializer<String> redisSerializer = new StringRedisSerializer();
       // 配置序列化(解决乱码的问题)
       RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
               // 缓存有效期
              .entryTtl(timeToLive)
               // 使用StringRedisSerializer来序列化和反序列化redis的key值
              .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
               // 使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
              .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer()))
               // 禁用空值
              .disableCachingNullValues();

       return RedisCacheManager.builder(factory)
              .cacheDefaults(config)
              .build();
  }
}

4.启动类开启事务和缓存

@SpringBootApplication
@MapperScan("com.**.mapper")
@EnableTransactionManagement
@EnableCaching
public class CodemeApplication {

   public static void main(String[] args) {
       SpringApplication.run(CodemeApplication.class, args);
  }

}

5.测试

@SpringBootTest
public class RedisTest {
   @Autowired
   private StringRedisTemplate stringRedisTemplate;

   @Resource
   private RedisTemplate<String,Object> redisTemplate;

   @Test
   public void setValue(){
       System.out.println("###########RedisTemplate#############");
       redisTemplate.opsForValue().set("name","Danny");
       redisTemplate.opsForValue().set("height",178.25);
  }
}