美文网首页
Spring boot整合RedisTemplate

Spring boot整合RedisTemplate

作者: 我的小熊不见了 | 来源:发表于2019-04-09 13:19 被阅读0次

    Spring boot整合RedisTemplate

    在application.yml中加入redis的配置信息:

    redis:
     #客户端超时时间单位是毫秒 默认是2000
     timeout: 10000
     #最大空闲数
     maxIdle: 300
     #连接池的最大数据库连接数。设为0表示无限制,如果是jedis 2.4以后用redis.maxTotal
     maxActive: 600
     #控制一个pool可分配多少个jedis实例,用来替换上面的redis.maxActive,如果是jedis 2.4以后用该属性
     maxTotal: 1000
     #最大建立连接等待时间。如果超过此时间将接到异常。设为-1表示无限制。
     maxWaitMillis: 1000
     #连接的最小空闲时间 默认1800000毫秒(30分钟)
     minEvictableIdleTimeMillis: 300000
     #每次释放连接的最大数目,默认3
     numTestsPerEvictionRun: 1024
     #逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
     timeBetweenEvictionRunsMillis: 30000
     #是否在从池中取出连接前进行检验,如果检验失败,则从池中去除连接并尝试取出另一个
     testOnBorrow: true
     #在空闲时检查有效性, 默认false
     testWhileIdle: true
     #redis集群配置
     #spring.redis.cluster.nodes=192.168.177.128:7001,192.168.177.128:7002,192.168.177.128:7003,192.168.177.128:7004,192.168.177.128:7005,192.168.177.128:7006
     #spring.redis.cluster.max-redirects=3
     #哨兵模式
     #redis.sentinel.host1=192.168.177.128
     #redis.sentinel.port1=26379
     #redis.sentinel.host2=172.20.1.231
     #redis.sentinel.port2=26379
    
    

    使用spring注解读取yml中的配置:

    @Configuration
    //@ConfigurationProperties(prefix = "redis")
    public class RedisTemplateConfig {
     private static final Logger log = LoggerFactory.getLogger(RedisTemplateConfig.class);
     @Value("${redis.host}")
     private String host;
    ​
     @Value("${redis.password}")
     private String password;
    ​
     @Value("${redis.port}")
     private Integer port;
    ​
     @Value("${redis.maxIdle}")
     private Integer maxIdle;
    ​
     @Value("${redis.timeout}")
     private Integer timeout;
    ​
     @Value("${redis.maxTotal}")
     private Integer maxTotal;
    ​
     @Value("${redis.maxWaitMillis}")
     private Integer maxWaitMillis;
    ​
     @Value("${redis.minEvictableIdleTimeMillis}")
     private Integer minEvictableIdleTimeMillis;
    ​
     @Value("${redis.numTestsPerEvictionRun}")
     private Integer numTestsPerEvictionRun;
    ​
     @Value("${redis.timeBetweenEvictionRunsMillis}")
     private long timeBetweenEvictionRunsMillis;
    ​
     @Value("${redis.testOnBorrow}")
     private boolean testOnBorrow;
    ​
     @Value("${redis.testWhileIdle}")
     private boolean testWhileIdle;
    
    

    这里使用的是@Value注解的方式。也可以使用类上被注释掉的方法。

    根据配置信息设置JedisConnectionFactory:

    @Bean
     public JedisConnectionFactory JedisConnectionFactory(){
     RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration ();
     redisStandaloneConfiguration.setHostName(host);
     redisStandaloneConfiguration.setPort(port);
     //由于我们使用了动态配置库,所以此处省略
     //redisStandaloneConfiguration.setDatabase(database);
     redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
     JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
     jedisClientConfiguration.connectTimeout(Duration.ofMillis(timeout));
     JedisConnectionFactory factory = new JedisConnectionFactory(redisStandaloneConfiguration,
     jedisClientConfiguration.build());
     return factory;
     }
    
    

    实例化 RedisTemplate 对象:

    实例化 RedisTemplate 对象:

    @Bean
     public RedisTemplate functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
     log.info("RedisTemplate实例化成功!");
     RedisTemplate redisTemplate = new RedisTemplate();
     initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
     return redisTemplate;
     }
    

    设置数据存入 redis 的序列化方式,并开启事务:

    private void initDomainRedisTemplate(RedisTemplate redisTemplate, RedisConnectionFactory factory) {
     //如果不配置Serializer,那么存储的时候缺省使用String,如果用User类型存储,那么会提示错误User can't cast to String!
     redisTemplate.setKeySerializer(new StringRedisSerializer());
     redisTemplate.setHashKeySerializer(new StringRedisSerializer());
     redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
     redisTemplate.setValueSerializer(fastJson2JsonRedisSerializer());
     // 开启事务
     redisTemplate.setEnableTransactionSupport(true);
     redisTemplate.setConnectionFactory(factory);
     }
    

    引入自定义序列化:

    @Bean
     public RedisSerializer fastJson2JsonRedisSerializer() {
     return new FastJson2JsonRedisSerializer<Object>(Object.class);
     }
    

    写入我们自己的工具类

    @Bean(name = "redisUtil")
     public RedisTemplateUtil redisUtil(RedisTemplate redisTemplate) {
     log.info("RedisUtil注入成功!");
     RedisTemplateUtil redisTemplateUtil = new RedisTemplateUtil();
     redisTemplateUtil.setRedisTemplate(redisTemplate);
     return redisTemplateUtil;
     }
    

    RedisTemplateUtil封装了对于redis的各种操作,而且可以自定义库。

    项目代码地址:https://github.com/qq1311256696/Spring-Boot-in-Action/tree/master/redis

    相关文章

      网友评论

          本文标题:Spring boot整合RedisTemplate

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