Spring boot整合RedisTemplate

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在菏泽老家邻村的公路边上有一个石碑,虽然久经风霜雨淋,但依然能清晰的看出那几个大字的的碑文`德配曹...
    海吃不肥阅读 8,657评论 0 0
  • 生得个中缘本然,早知诗趣趁流年。 欲将欢赏存心底,恨不风光驻眼前。 怒放花儿春梦里,绕飞燕子柳丝边。 当时转觉千般...
    雪窗_武立之阅读 1,813评论 1 5
  • 当手头事情特别多,头绪繁杂的时候,我们都希望能够快速高效愉悦的完成所有工作。如果你在这方面有所欠缺,以下几点...
    舒感阅读 5,203评论 0 2
  • 1. why 考虑以下类: 如果想得到一个理想中的BookViewModel, 不借助任何类的帮助,我们可能会这样...
    Angeladaddy阅读 5,062评论 0 4