美文网首页
spring boot 2.0配置Redis缓存

spring boot 2.0配置Redis缓存

作者: 雨夏_ | 来源:发表于2018-10-12 14:12 被阅读21次

1、引入 spring-boot-starter-redis

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

2、添加配置文件

spring:
  redis:
    database: 0 # Redis数据库索引(默认为0)
    host: localhost # Redis服务器地址
    port: 6379 # Redis服务器连接端口(默认为6379)
    password: 970713  # Redis服务器连接密码(默认为空)
    timeout: 60s # 数据库连接超时时间,2.0 中该参数的类型为Duration,配置的时候需要指明单位
    jedis:
      pool:
        max-active: 8 # 连接池最大连接数(使用负值表示没有限制)
        max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
        max-idle: 8 # 连接池中的最大空闲连接
        min-idle: 0 # 连接池中的最小空闲连接

3.缓存的配置类

@Configuration
@EnableCaching
public class RedisCacheConfig extends CachingConfigurerSupport {

    /**
     * 自动生成Key,作为Redis的Key
     */
    @Bean
    public KeyGenerator keyGenerator() {
        return new KeyGenerator() {
            @Override
            public Object generate(Object target, Method method, Object... params) {
                StringBuilder sb = new StringBuilder();
                sb.append(target.getClass().getName());
                sb.append(method.getName());
                for (Object obj : params) {
                    sb.append(obj.toString());
                }
                return sb.toString();
            }
        };
    }

    /**
     * 缓存管理器
     */
    @SuppressWarnings("rawtypes")
    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisCacheManager cacheManager = RedisCacheManager.create(factory);
        return cacheManager;
    }

    /**
     * 配置RedisTemplate
     */
    @Bean
    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new 
                                     Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setValueSerializer(jackson2JsonRedisSerializer);
        template.afterPropertiesSet();
        return template;
    }
}

4.配置完成后,进行测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class RedisTest {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @Autowired
    private RedisTemplate redisTemplate;

    @Test
    public void test() {
        stringRedisTemplate.opsForValue().set("aaa", "111");
        System.out.println(stringRedisTemplate.opsForValue().get("aaa"));
    }

    @Test
    public void testObj() throws InterruptedException {
        User user = new User(null, "yuxia", "111111", "123@qq.com",
                                                 "yuxia", "2018-10-12 09:52:55");
        ValueOperations<String, Object> operations = redisTemplate.opsForValue();
        operations.set("com.yuxia1", user);
        operations.set("com.yuxia.f", user, 1, TimeUnit.SECONDS);// 设置1s后过期
        Thread.sleep(1000);// 线程暂停1s后,com.yuxia.f过期
        // redisTemplate.delete("com.yuxia.f");
        boolean exists = redisTemplate.hasKey("com.yuxia.f");
        if (exists) {
            System.out.println("exists is true");
        } else {
            System.out.println("exists is false");
        }
    }

}

5.自动根据方法,生成缓存

@RestController
public class UserController {

    @Autowired
    UserRepository userRepository;
    @RequestMapping("/getUser")
    @Cacheable(value="user-key")
    public User getUser(){
        User user=userRepository.findByUserName("yuxia");
        System.out.println("再次访问,不会输出");
        return user;
    }
}

注意:如果使用了热部署,会报错:java.lang.ClassCastException: com.example.demo.domain.User cannot be cast to com.example.demo.domain.User

相关文章

网友评论

      本文标题:spring boot 2.0配置Redis缓存

      本文链接:https://www.haomeiwen.com/subject/dogwaftx.html