Springboot整合redis

1. 概述

    这里使用RedisTemplate访问Redis数据结构,spring 封装了 RedisTemplate 对象来进行对redis的各种操作,它支持所有的 redis 原生的 api。
  • Type Parameters:

    • K
      模板中的Redis key的类型(通常为String)如:RedisTemplate
      注意: 如果没特殊情况,切勿定义成RedisTemplate,否则根据里氏替换原则,使用的时候会造成类型错误 。
    • V
      模板中的Redis value的类型
  • RedisTemplate中定义了对5种数据结构操作

    redisTemplate.opsForValue(); //操作字符串
    redisTemplate.opsForHash(); //操作hash
    redisTemplate.opsForList(); //操作list
    redisTemplate.opsForSet(); //操作set
    redisTemplate.opsForZSet(); //操作有序set
    

2. maven依赖

    
          org.springframework.boot
          spring-boot-starter-data-redis
     

3. 配置文件

spring:
    redis:
    database: 0
    host: 127.0.0.1
    #password: # Login password of the redis server.
    port: 6379
    timeout: 0
    pool:
      max-active: 8
      max-idle: 8
      max-wait: -1
      min-idle: 0

4. java配置类

@Configuration
@EnableCaching //开启缓存配置
public class RedisConfig extends CachingConfigurerSupport{

    /**
     * Method key generator key generator.
     *
     * @return the key generator
     */
    @Bean
    public KeyGenerator methodKeyGenerator() {
        return (target, method, 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();
        };
    }

    /**
     * Cache manager cache manager.
     *
     * @param redisTemplate the redis template
     * @return the cache manager
     */
    @Bean
    public CacheManager cacheManager(RedisTemplate redisTemplate) {
        return new RedisCacheManager(redisTemplate);
    }

    /**
     * Redis template redis template.
     *
     * @param factory the factory
     * @return the redis template
     */
    @Bean
    public RedisTemplate redisTemplate(RedisConnectionFactory factory) {
        StringRedisTemplate template = new StringRedisTemplate(factory);
        // 设置序列化工具
        setSerializer(template);
        template.afterPropertiesSet();
        return template;
    }

    /**
     * 设置Serializer
     *
     * @param template RedisTemplate
     */
    private void setSerializer(StringRedisTemplate template) {
        //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值(默认使用JDK的序列化方式)
        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);
    }
}
 
 

5.常用方法

@Component
public class RedisUtils {

    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 无过期时间
     * @param key
     * @param value
     */
    public void setValue(String key, String value) {
        redisTemplate.opsForValue().set(key, value);
    }

    /**
     * 以s为单位设置过期时间
     * @param key
     * @param value
     * @param second
     */
    public void setExpireBySecond(String key, String value, Long second) {
        redisTemplate.opsForValue().set(key, value, second, TimeUnit.SECONDS);
    }

    /**
     * 以min为单位设置过期时间
     * @param key
     * @param value
     * @param minute
     */
    public void setExpireByMinute(String key, String value, Long minute) {
        redisTemplate.opsForValue().set(key, value, minute, TimeUnit.MINUTES);
    }
    /**
     * 以h为单位设置过期时间
     * @param key
     * @param value
     * @param hours
     */
    public void setExpireByHours(String key, String value, Long hours) {
        redisTemplate.opsForValue().set(key, value, hours, TimeUnit.HOURS);
    }

    /**
     * 获取redis的数据
     * @param key
     * @return
     */
    public String getValue(String key) {
        return redisTemplate.opsForValue().get(key);
    }

    /**
     * 删除redis的数据
     * @param key
     */
    public void delete(String key) {
        redisTemplate.delete(key);
    }

}

Created by [wayne_wzy] at 2018/7/12

你可能感兴趣的:(Springboot整合redis)