前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring boot整合RedisTemplate

Spring boot整合RedisTemplate

作者头像
我的小熊不见了丶
发布2019-05-22 23:58:26
2.8K0
发布2019-05-22 23:58:26
举报
文章被收录于专栏:晓月寒·晓月寒·

Spring boot整合RedisTemplate

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

代码语言:javascript
复制
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中的配置:

代码语言:javascript
复制
@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:

代码语言:javascript
复制
@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 对象:

代码语言:javascript
复制
@Bean
 public RedisTemplate functionDomainRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
 log.info("RedisTemplate实例化成功!");
 RedisTemplate redisTemplate = new RedisTemplate();
 initDomainRedisTemplate(redisTemplate, redisConnectionFactory);
 return redisTemplate;
 }

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

代码语言:javascript
复制
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);
 }

引入自定义序列化:

代码语言:javascript
复制
@Bean
 public RedisSerializer fastJson2JsonRedisSerializer() {
 return new FastJson2JsonRedisSerializer<Object>(Object.class);
 }

写入我们自己的工具类

代码语言:javascript
复制
@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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring boot整合RedisTemplate
  • 在application.yml中加入redis的配置信息:
  • 使用spring注解读取yml中的配置:
  • 根据配置信息设置JedisConnectionFactory:
  • 实例化 RedisTemplate 对象:
  • 写入我们自己的工具类
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档