上一篇 <<<Session共享解決方案
下一篇 >>>分布式全局ID生成總覽
原理:
第一次創(chuàng)建session,往redis里緩存?zhèn)浞菀环?br> 第二次纵东,先從session里面找,找不到的話在往redis里面找
注:
在springboot項目里能很好的支持咪辱,如果自己寫的話,還需要過濾器等很麻煩
接入流程:
1、引入依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring boot 與redis應(yīng)用基本環(huán)境配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-redis</artifactId>
</dependency>
<!--spring session 與redis應(yīng)用基本環(huán)境配置,需要開啟redis后才可以使用,不然啟動Spring boot會報錯 -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
</dependencies>
2肠仪、加入代碼
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
//這個類用配置redis服務(wù)器的連接
//maxInactiveIntervalInSeconds為SpringSession的過期時間(單位:秒)
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 1800)
public class SessionConfig {
// 冒號后的值為沒有配置文件時,制動裝載的默認值
@Value("${redis.hostname:localhost}")
String HostName;
@Value("${redis.port:6379}")
int Port;
@Bean
public JedisConnectionFactory connectionFactory() {
JedisConnectionFactory connection = new JedisConnectionFactory();
connection.setPort(Port);
connection.setHostName(HostName);
return connection;
}
}
import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;
//初始化Session配置
public class SessionInitializer extends AbstractHttpSessionApplicationInitializer {
public SessionInitializer() {
super(SessionConfig.class);
}
}
3备典、session使用沒啥區(qū)別
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class IndexController {
@Value("${server.port}")
private String port;
@RequestMapping("/index")
public String index() {
return "server---value:" + port;
}
@RequestMapping("/setSession")
public String setSession(HttpServletRequest request, String key, String value) {
HttpSession session = request.getSession();
session.setAttribute(key, value);
return "server---port:" + port + ",success";
}
@RequestMapping("/getSession")
public String getSession(HttpServletRequest request, String key) {
HttpSession session = null;
try {
session = request.getSession(false);
} catch (Exception e) {
// TODO: handle exception
}
String value = null;
if (session != null) {
value = (String) session.getAttribute(key);
}
return "server---port:" + port + " value:" + value;
}
}