redis保存session信息的示例代碼
本文實(shí)現(xiàn)一個(gè)將session信息保存在 redis中,多個(gè)tomcat中的工程都從redis獲取session信息的示例。
1、新建一個(gè)maven web 工程名為 session-redis 如下:

目錄結(jié)構(gòu)如下:

2、修改配置文件內(nèi)容
pom.xml 中依賴如下:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
<spring.version>5.0.4.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--spring 依賴包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring 依賴包 結(jié)束-->
<!-- Spring 升級4+ 依賴的JSON包 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.2</version>
</dependency>
<!-- /Spring 升級4+ 依賴的JSON包 -->
<!--sfl4j+spring-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>org.logback-extensions</groupId>
<artifactId>logback-ext-spring</artifactId>
<version>0.1.5</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.25</version>
</dependency>
<!--sfl4j+spring-->
<!--jedis依賴-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
<!--web包依賴-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<!--spirng實(shí)現(xiàn)redissession存儲(chǔ)依賴包-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.0.4.RELEASE</version>
</dependency>
</dependencies>
web.xml 配置文件內(nèi)容
<web-app>
<display-name>Archetype Created Web Application</display-name>
<!--配置spring session 過濾器 session數(shù)據(jù)的保存應(yīng)該是通過過濾器來起作用,具體如何起作用日后研究-->
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置springmvc -->
<servlet>
<servlet-name>springMvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:mvc-demo.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springMvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>mvc-demo.xml 增加配置內(nèi)容、
<!--spring注解配置-->
<mvc:annotation-driven/>
<context:component-scan base-package="com.test.session"/>
<!--redis保存session信息配置類-->
<bean id="redisHttpSessionConfiguration"
class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
<property name="maxInactiveIntervalInSeconds" value="60"/><!--session 信息過期時(shí)間-->
</bean>
<!--redis 鏈接信息配置-->
<bean id="standlongConfig" class="org.springframework.data.redis.connection.RedisStandaloneConfiguration">
<property name="port" value="6379"/>
<property name="hostName" value="127.0.0.1"/>
<property name="database" value="0"/>
</bean>
<!--jedis 連接工廠配置-->
<bean id="jedisConnectionFactory" class="
org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<constructor-arg name="standaloneConfig" ref="standlongConfig"/>
</bean>3、增加IndexController類,里邊兩個(gè)方法
index 方法返回字符串 index ,并且在session中添加屬性 name 為 zhangsan ,打印sessionid
getName 方法 返回session中的name屬性 .打印sessionid
如下:
@RestController
public class IndexController {
@GetMapping ("/index")
public String index(HttpServletRequest request){
request.getSession().setAttribute("name","zhagnsan");
System.out.println("-----index------------sessionid"+request.getSession().getId());
return "index";
}
@GetMapping ("/getName")
public String getName(HttpServletRequest request){
System.out.println("----getName-------------sessionid======"+request.getSession().getId());
return (String)request.getSession().getAttribute("name");
}
}4、在本機(jī)啟動(dòng)redis服務(wù)

5、idea中配置兩個(gè)tomcat 端口不能相同 我們這里 tomcat8.5-1 使用 80端口 tomcat8.5-1使用8080 端口 如下:


兩個(gè)tomcat 都部署session_redis 工程如下 ,訪問路徑為 /

6、啟動(dòng)兩個(gè)tomcat 訪問 tomcat1 中的項(xiàng)目 http://localhost:80/index 在session中設(shè)置了name =zhangsan

后臺(tái)打印sessionid為:

直接訪問 tomcat2 中的 getName 方法 http://localhost:8080/getName 可以直接訪問到 session 并且后臺(tái)輸出sessionid和tomcat1中相同 。所以 session保存成功。

由 于我們在配置文件中設(shè)置 session過期時(shí)間為 60秒 所以60秒后再次訪問 getName方法,發(fā)現(xiàn)訪問不到內(nèi)容了如下:

7、通過redis 客戶端 我們可以看到 隨著session信息的保存以及過期 redis中鍵值的變化 ,如下:

代碼下載地址: https://github.com/zhangxinmin/session-redis.git
到此這篇關(guān)于redis保存session信息的文章就介紹到這了,更多相關(guān)redis保存session信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Redis數(shù)據(jù)持久化的概念介紹
Redis是內(nèi)存數(shù)據(jù)庫,數(shù)據(jù)都是存儲(chǔ)在內(nèi)存中,需要定期將Redis中的數(shù)據(jù)以某種形式(或命數(shù)據(jù)令)從內(nèi)存保存到硬盤,今天給大家分享Redis數(shù)據(jù)的持久化的概念介紹,需要的朋友參考下吧2021-08-08
Redis+Lua腳本實(shí)現(xiàn)計(jì)數(shù)器接口防刷功能(升級版)
這篇文章主要介紹了Redis+Lua腳本實(shí)現(xiàn)計(jì)數(shù)器接口防刷功能,使用腳本使得set命令和expire命令一同達(dá)到Redis被執(zhí)行且不會(huì)被干擾,在很大程度上保證了原子操作,對Redis實(shí)現(xiàn)計(jì)數(shù)器接口防刷功能感興趣的朋友一起看看吧2022-02-02
Redis集群指定主從關(guān)系及動(dòng)態(tài)增刪節(jié)點(diǎn)方式
這篇文章主要介紹了Redis集群指定主從關(guān)系及動(dòng)態(tài)增刪節(jié)點(diǎn)方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
Redis集群增加節(jié)點(diǎn)與刪除節(jié)點(diǎn)的方法詳解
這篇文章主要給大家介紹了關(guān)于Redis集群增加節(jié)點(diǎn)與刪除節(jié)點(diǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Redis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Redis源碼解析:集群手動(dòng)故障轉(zhuǎn)移、從節(jié)點(diǎn)遷移詳解
這篇文章主要介紹了Redis源碼解析:集群手動(dòng)故障轉(zhuǎn)移、從節(jié)點(diǎn)遷移的相關(guān)內(nèi)容,涉及通過集群定時(shí)器函數(shù)clusterCron實(shí)現(xiàn)從節(jié)點(diǎn)遷移等知識(shí),具有一定參考價(jià)值,需要的朋友可以了解。2017-10-10
從零搭建SpringBoot2.X整合Redis框架的詳細(xì)教程
這篇文章主要介紹了從零搭建SpringBoot2.X整合Redis框架的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12
如何使用注解方式實(shí)現(xiàn)?Redis?分布式鎖
這篇文章主要介紹了如何使用注解方式實(shí)現(xiàn)Redis分布式鎖,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,教大家如何優(yōu)雅的使用Redis分布式鎖,感興趣的小伙伴可以參考一下2022-07-07

