今天看啥  ›  专栏  ›  晓月寒丶

Spring boot整合RedisTemplate

晓月寒丶  · 简书  ·  · 2019-04-09 13:19

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




原文地址:访问原文地址
快照地址: 访问文章快照