Spring Data Redis
添加依赖:Spring Data Redis + 连接池(commos-pool2)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.0</version>
</dependency>
配置Redis信息
spring.redis.database=0
spring.redis.password=123
spring.redis.port=6379
spring.redis.host=127.0.0.1
spring.redis.lettuce.pool.min-idle=5
spring.redis.lettuce.pool.max-idle=10
spring.redis.lettuce.pool.max-active=8
spring.redis.lettuce.pool.max-wait=1ms
spring.redis.lettuce.shutdown-timeout=100ms
@Configuration
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {
public RedisAutoConfiguration() {
}
@Bean
@ConditionalOnMissingBean(
name = {"redistemplate"}
)
public Redistemplate<Object, Object> redistemplate(RedisConnectionFactory redisConnectionFactory) throws UnkNownHostException {
Redistemplate<Object, Object> template = new Redistemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
@Bean
@ConditionalOnMissingBean
public StringRedistemplate stringRedistemplate(RedisConnectionFactory redisConnectionFactory) throws UnkNownHostException {
StringRedistemplate template = new StringRedistemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
自动化配置类理解:
-
首先标记这个是一个配置类,同时该配置在 RedisOperations 存在的情况下才会生效(即项目中引入了 Spring Data Redis)
-
然后导入在 application.properties 中配置的属性
-
然后再导入连接池信息(如果存在的话)
-
最后,提供了两个 Bean ,Redistemplate 和 StringRedistemplate ,其中 StringRedistemplate 是 Redistemplate 的子类,两个的方法基本一致,不同之处主要体现在操作的数据类型不同,Redistemplate 中的两个泛型都是 Object ,意味者存储的 key 和 value 都可以是一个对象,而 StringRedistemplate 的 两个泛型都是 String ,意味者 StringRedistemplate 的 key 和 value 都只能是字符串。如果开发者没有提供相关的 Bean ,这两个配置就会生效,否则不会生效
Redis 中的数据操作,大体上来说,可以分为两种:
Spring Boot 的自动化配置,只能配置单机的 Redis ,如果是 Redis 集群,则所有的东西都需要自己手动配置
session共享
在传统的单服务架构中,一般来说,只有一个服务器,那么不存在 Session 共享问题,但是在分布式/集群项目中,Session 共享则是一个必须面对的问题
Spring Session 就是使用 Spring 中的代理过滤器,将所有的 Session 操作拦截下来,自动的将数据 同步到 Redis 中,或者自动的从 Redis 中读取数据。
对于开发者来说,所有关于 Session 同步的操作都是透明的,开发者使用 Spring Session,一旦配置完成后,具体的用法就像使用一个普通的 Session 一样
-
添加依赖,使用 Spring Boot2.1.5及以上的话,除了上面这些依赖之外,需要额外添加 Spring Security 依赖(其他操作不受影响,仅仅只是多了一个依赖,当然也多了 Spring Security 的一些默认认证流程)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
-
配置Redis信息
-
使用,配置完成后 ,就可以使用 Spring Session 了,其实就是使用普通的 HttpSession ,其他的 Session 同步到 Redis 等操作,框架已经自动帮你完成了
@RestController
public class HelloController {
@Value("${server.port}")
Integer port;
@GetMapping("/set")
public String set(HttpSession session) {
session.setAttribute("user", "javaboy");
return String.valueOf(port);
}
@GetMapping("/get")
public String get(HttpSession session) {
return session.getAttribute("user") + ":" + port;
}
}
使用两个端口启动两个服务,访问两个服务能获取同一session
-
引入Nginx
进入 Nginx 的安装目录的 conf 目录下(默认是在 /usr/local/Nginx/conf
),编辑 Nginx.conf 文件:
在这段配置中:
-
upstream 表示配置上游服务器
-
javaboy.org 表示服务器集群的名字,这个可以随意取名字
-
upstream 里边配置的是一个个的单独服务
-
weight 表示服务的权重,意味者将有多少比例的请求从 Nginx 上转发到该服务上
-
location 中的 proxy_pass 表示请求转发的地址,
/
表示拦截到所有的请求,转发转发到刚刚配置好的服务集群中 -
proxy_redirect 表示设置当发生重定向请求时,Nginx 自动修正响应头数据(默认是 Tomcat 返回重定向,此时重定向的地址是 Tomcat 的地址,我们需要将之修改使之成为 Nginx 的地址)。
配置完成后,将本地的 Spring Boot 打包好的 jar 上传到 Linux ,然后在 Linux 上分别启动两个 Spring Boot服务
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。