注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

和申的个人主页

专注于java开发,1985wanggang

 
 
 

日志

 
 

Redis系列一 - springboot 集成 redis Demo和原理  

2017-10-10 14:03:43|  分类: java缓存 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1. 概述

本文介绍如何通过springboot集成redis并简单介绍其原理。

2. Demo和原理

2.1. application.properties

application.properties配置参数如下

spring.redis.database=0
spring
.redis.host=192.168.188.7
spring
.redis.password=
spring
.redis.port=6379
spring
.redis.pool.max-idle=8
spring
.redis.pool.min-idle=0
spring
.redis.pool.max-active=8
spring
.redis.pool.max-wait=-1


备注: 如果你要使用集群redis,则可以配置以下参数spring.redis.sentinel.* 或 spring.redis.cluster.*

2.2. RedisProperties

以上参数会被自动封装到RedisProperties中: 此类被@ConfigurationProperties注解,表示从外部文件(如application.properties)注入属性值

@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
/**
* Database index used by the connection factory.
*/

private int database = 0;

/**
* Redis url, which will overrule host, port and password if set.
*/

private String url;

/**
* Redis server host.
*/

private String host = "localhost";

/**
* Login password of the redis server.
*/

private String password;

/**
* Redis server port.
*/

private int port = 6379;
// 其它参数略
}


2.3. RedisAutoConfiguration

因为此类被@EnableConfigurationProperties注解,所以spring boot会触发对RedisProperties执行自动绑定属性值。

此类会自动创建bean对象: redis连接池JedisConnectionFactory和redis模板类(RedisTemplate和StringRedisTemplate)。我们会直接在应用中通过@Autowire注入以上对象

/**
* EnableAutoConfiguration Auto-configuration for Spring Data's Redis support.
*
*/

@Configuration
// 如果有以下三个类,则可以初始化此类
@ConditionalOnClass({ JedisConnection.class, RedisOperations.class, Jedis.class })
// @EnableConfigurationProperties:对RedisProperties执行自动绑定属性值
@EnableConfigurationProperties(RedisProperties.class)
public class RedisAutoConfiguration {

@Configuration
// 如果有以下一个类,则可以初始化此类
@ConditionalOnClass(GenericObjectPool.class)
protected static class RedisConnectionConfiguration {

// 初始化JedisConnectionFactory工厂类对象,参数来自RedisProperties
// 配置参数有:线程池,sentinel,cluster
@Bean
@ConditionalOnMissingBean(RedisConnectionFactory.class)
public JedisConnectionFactory redisConnectionFactory()
throws UnknownHostException {
return applyProperties(createJedisConnectionFactory());
}


// 配置类
@Configuration
protected static class RedisConfiguration {
// 初始化bean
@Bean
@ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template =
new RedisTemplate<Object, Object>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}

// 初始化bean
@Bean @ConditionalOnMissingBean(StringRedisTemplate.class)
public StringRedisTemplate stringRedisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template =
new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}

}



2.4. FirstExample

演示RedisTemplate的用法:

@Service
public class FirstExample {
@Autowired
private RedisTemplate<String, String> template;

public void save(String userId, String value) {
template.boundListOps(userId).leftPush(
value);
}
}


2.5. FirstApplication

springboot启动类

@SpringBootApplication
public class FirstApplication {
private static final Logger log = LoggerFactory.getLogger(FirstApplication.class);

public static void main(String[] args) {
log.info(
"Start FirstApplication.. ");
SpringApplication.run(FirstApplication.class, args);
}
}


查看源码@SpringBootApplication被@EnableAutoConfiguration注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public
@interface SpringBootApplication {
....
}


被@EnableAutoConfiguration注解时,springboot启动时会扫描对应jar包中的META-INF/spring-autoconfigure-metadata.properties文件,并初始化里面的配置的类。查看spring-autoconfigure-metadata.properties,里面配置了上文的RedisAutoConfiguration类,所以我们可以直接在类中注入RedisTemplate.

...
org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration=
...


2.6. FirstApplicationTests

测试类,执行类会在redis中创建一个值

@RunWith(SpringRunner.class)
@SpringBootTest(classes=FirstApplication.class)
public class FirstApplicationTests {
@Autowired
private FirstExample firstExample;

@Test
public void save(){
firstExample.save(
"name", "value");
}
}


3. 代码 ##

上文的代码详细见这里


from:http://blog.csdn.net/hry2015/article/details/74276423

  评论这张
 
阅读(106)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017