Asuka直接使用spring-boot-redis作为缓存依赖,通过其封装好的RedisTemplate和StringRedisTemplate对Redis缓存进行管理,不再单独封装一套RedisUtil,因为RedisTemplate已经足够具备易用性,对于了解Redis的原生方法亦有所帮助。

依赖与配置

  • pom.xml

    1. <dependency>
    2. <groupId>org.springframework.boot</groupId>
    3. <artifactId>spring-boot-starter-data-redis</artifactId>
    4. </dependency>
  • application-dev.yml

    1. spring:
    2. redis:
    3. # Redis 服务器ip
    4. host: 192.168.31.178
    5. # Redis 端口
    6. port: 6379
    7. # Redis 数据库索引(默认为 0)
    8. database: 0
    9. # Redis 服务器连接密码(默认为空)
    10. password:
  • RedisConfig ```java @Configuration public class RedisConfig {

    @Bean public RedisTemplate redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {

    1. Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
    2. RedisSerializer<?> redisSerializer = new StringRedisSerializer();
    3. ObjectMapper om = new ObjectMapper();
    4. om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
    5. om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
    6. jackson2JsonRedisSerializer.setObjectMapper(om);
    7. RedisTemplate<String, Object> template = new RedisTemplate<>();
    8. template.setConnectionFactory(lettuceConnectionFactory);
    9. template.setKeySerializer(redisSerializer);
    10. template.setValueSerializer(jackson2JsonRedisSerializer);
    11. template.setHashKeySerializer(redisSerializer);
    12. template.setHashValueSerializer(jackson2JsonRedisSerializer);
    13. template.afterPropertiesSet();
    14. return template;

    }

}

  1. <a name="HZye8"></a>
  2. ## RedisTemplate方法简介<br />
  3. RedisTemplate对Redis的5种数据结构进行了高度封装,统一返回operation接口,如下所示:
  4. - 操作字符串:`redisTemplate.opsForValue()`
  5. - 操作 Hash:`redisTemplate.opsForHash()`
  6. - 操作 List:`redisTemplate.opsForList()`
  7. - 操作 Set:`redisTemplate.opsForSet()`
  8. - 操作 ZSet:`redisTemplate.opsForZSet()`
  9. 对于String类型的数据,又提供了StringRedisTemplate,两者的区别主要在于:
  10. 1. RedisTemplate是一个泛型类,可以操作任何类型,而StringRedisTemplate的键和值都必须是String类型
  11. 1. 两者数据不共通,无法获取对方管理的缓存数据
  12. <a name="8qtRC"></a>
  13. ## 实战演示
  14. 在需要使用缓存的service、component或controller中注入RedisTemplate,然后调用redisTemplate的各种ops方法,如下所示:
  15. ```java
  16. @Autowired
  17. private RedisTemplate<String, Object> redisTemplate;
  1. redisTemplate.opsForList().leftPush("cache:demo", loginRecord);

更新计划

  • 支持Memcache、GuavaCache等多种缓存
  • 提供slf4j类似的缓存切面,根据依赖和配置自动选择缓存