springboot整合redis和springsession做session伺服器
一. 簡介
springboot2.0整合redis可以參照博主的另一篇文章: springboot2.0整合redis
在分散式專案中,為了保持無狀態的應用,用redis做session伺服器。springsession可以和redis很好的配合。
二. 程式碼
2.1 pom.xml
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demo</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demo</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- jackson序列化 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <!-- spring session --> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.2 application.yml
server:
port: 8080
# redis相關配置
spring:
redis:
database: 0
host: redis伺服器IP
port: 6379
password: 密碼
2.3 RedisConfig
package com.example.demo.config; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; /** * @author yuanshushu * @date 2018/9/1 * @description REDIS配置類 */ @Configuration @EnableRedisHttpSession public class RedisConfig { @Bean public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); // 使用Jackson2JsonRedisSerialize 替換預設的jdkSerializeable序列化 Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(objectMapper); // 設定value的序列化規則和 key的序列化規則 redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); redisTemplate.afterPropertiesSet(); return redisTemplate; } }
2.4 SessionController
2.4.1 8080埠的Controller
列印session資訊和向session中儲存使用者資訊
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* @author yuanshushu
* @date 2018/9/1
* @description SESSION控制類
*/
@RestController
public class SessionController {
@GetMapping("/test")
public Map<String, Object> testSessionId(HttpServletRequest request) {
Map<String, Object> sessionIdPortMap = new HashMap<String, Object>();
// 獲取session資訊
sessionIdPortMap.put("sessionId:", request.getSession().getId());
sessionIdPortMap.put("伺服器埠:", request.getServerPort());
// 向session中儲存使用者資訊 key規則: user + "_" + uid
request.getSession().setAttribute("user_1", "{uid:1,username: [email protected]}");
return sessionIdPortMap;
}
}
2.4.2 8081埠的controller
列印session資訊和獲取session中使用者資訊
package com.example.demo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
/**
* @author yuanshushu
* @date 2018/9/1
* @description SESSION控制類
*/
@RestController
public class SessionController {
@GetMapping("/test")
public Map<String, Object> testSessionId(HttpServletRequest request) {
Map<String, Object> sessionIdPortMap = new HashMap<String, Object>();
// 獲取session資訊
sessionIdPortMap.put("sessionId:", request.getSession().getId());
sessionIdPortMap.put("伺服器埠:", request.getServerPort());
// 獲取session中uid為1的使用者的資訊
String user_1 = (String) request.getSession().getAttribute("user_1");
sessionIdPortMap.put("user_1", user_1);
return sessionIdPortMap;
}
}
2.5 啟動類
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
三. 測試
此時,可以通過redis desktop manager檢視,有一個session生成,時間預設為半小時。
此時,將專案複製一份,埠改為8081,訪問http://localhost:8081/test,仍然得到相同的sessionId,並可以得到session中儲存的使用者資訊:
說明session已經被redis共享了。
此時,如果將專案關閉,再啟動,仍然會是這個sessionId(預設半小時失效)。
在專案中,可以通過一個工具類,封裝獲取session的方法,然後對該session做操作。
相關推薦
springboot整合redis和springsession做session伺服器
一. 簡介 springboot2.0整合redis可以參照博主的另一篇文章: springboot2.0整合redis 在分散式專案中,為了保持無狀態的應用,用redis做session伺服器。springsession可以和r
springboot整合redis和springCache
1.在配置檔案中添加註解@EnableCaching (RedisConfig.class) /** * Created by zhuzhengping on 2017/2/19. * redis配置 */ @Configuration @Enable
springboot使用redis和ThreadLocal做單點登入
浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>
springboot-整合redis:做快取,做分散式共享session
springboot-整合redis:做快取,做分散式共享session 文章目錄 springboot-整合redis:做快取,做分散式共享session 1.redis應用場景 2配置 3.測試 完整
Redis詳解 - SpringBoot整合Redis,RedisTemplate和註解兩種方式的使用
本文主要講 Redis 的使用,如何與 SpringBoot 專案整合,如何使用註解方式和 RedisTemplate 方式實現快取。最後會給一個用 Redis 實現分散式鎖,用在秒殺系統中的案例。 更多 Redis 的實際運用場景請關注開源專案 coderiver 專案地址:github.com/cac
springboot 整合redis 做快取
一、新增依賴jar包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-re
springboot整合redis,實現session共享
一直對serssion的共享有著很大的疑惑,對於我現在的工作的地方,所在的部門,因為沒有前臺頁面,純屬後臺。所以,不會存在session的共享問題。但是出於好奇,也是心裡的疑惑,今天也動手實驗了下。
SpringBoot 2.0 | SpringBoot 整合 Redis + Cache + 分散式 Session
簡介 1.Redis redis是一個key-value儲存系統。它支援儲存的value型別相對更多,包括string(字串)、list(連結串列)、set(集合) 和hash(雜湊型別)。這些資料型別都支援push/pop、add/remove及取交集並集和差集及更豐富的操作,
SpringBoot整合Redis、和Redis叢集
一、SpringBoot整合Redis 步驟:1.新增依賴: <!--redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId
springBoot整合Redis(單機版和叢集版)
Spring Boot中除了對常用的關係型資料庫提供了優秀的自動化支援之外,對於很多NoSQL資料庫一樣提供了自動化配置的支援,包括:Redis, MongoDB, Elasticsearch, Solr和Cassandra。 Redis是一個開
springboot整合mybatis,mysql做資料庫儲存,redis做快取
redis應用的場景通過快取來減少對關係型資料庫的查詢次數,減輕資料庫壓力。在執行DAO類的select***(), query***()方法時,先從Redis中查詢有沒有快取資料,如果有則直接從Redis拿到結果,如果沒有再向資料庫發起查詢請求取資料。springboot已
springboot 整合 redis 共享Session-spring-session-data-redis
ssi nco template idl end timeunit 超時 超時時間 database 參考:https://www.cnblogs.com/ityouknow/p/5748830.html 如何使用 1、引入 spring-boot-starte
springboot整合redis實現訊息釋出訂閱模式-雙通道(跨多伺服器)
基礎配置參考https://blog.csdn.net/llll234/article/details/80966952 查看了基礎配置那麼會遇到一下幾個問題: 1.實際應用中可能會訂閱多個通道,而一下這種寫法不太通用container.addMessageListener
springboot整合redis——redisTemplate的使用
關系 img redis-cli redis 安裝 -i 進行 start 啟動 一、概述 相關redis的概述,參見Nosql章節 redisTemplate的介紹,參考:http://blog.csdn.net/ruby_one/article/detail
springboot整合redis緩存
springboot redis 使用springBoot添加redis緩存需要在POM文件裏引入 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>
【SpringBoot系列2】SpringBoot整合Redis
並且 nds key值 數據 配置數據源 eth ren core 成功 前言: 真的越來越喜歡SpringBoot了,這是SpringBoot學習系列之一。 正文: 1:首先在pom文件中添加依賴,記得是spring-boot-starter-data-redis,不是s
八、springboot整合redis
clu com figure pri alt pass oot wired 用戶登錄 整合Redis 一. 註解方式實現添加緩存 1.在pom.xml加入依賴 <!-- 配置使用redis啟動器 --> <dependency> <
SpringBoot整合Kafka和Storm
name cat engine override interrupt length dep 發的 介紹 前言 本篇文章主要介紹的是SpringBoot整合kafka和storm以及在這過程遇到的一些問題和解決方案。 kafka和storm的相關知識 如果你對kafka和st
SpringBoot整合Jsp和Thymeleaf (附工程)
curd scrip implement osi 數據表 del setter esp myba 前言 本篇文章主要講述SpringBoot整合Jsp以及SpringBoot整合Thymeleaf,實現一個簡單的用戶增刪改查示例工程。事先說明,這兩個是單獨整合的,也就是兩個
SpringBoot整合Redis初實踐
取數據 redis服務器 公眾號 redis-cli 內存 將在 個數 img 代理 Redis是一個開源(BSD許可),內存存儲的數據結構服務器,可用作數據庫,高速緩存和消息隊列代理。 有時,為了提升整個網站的性能,在開發時會將經常訪問的數據進行緩存,這樣在調用這