官方文檔:https://docs.spring.io/spring-session/docs/2.0.2.RELEASE/reference/html5/
在單應用中我們的session來保存用戶信息,通常會保存在服務器中(如tomcat),但是我們把應用搭建成分布式的集群,然后利用LVS或Nginx做負載均衡,那么來自同一用戶的Http請求將有可能被分發到兩個不同的應用中。
那么如何解決在分布式中的session共享問題。可行的方案有memcached實現session共享,也可以用redis實現。今天主要介紹Spring Session.
Spring Session提供了一個API和實現來管理用戶的會話信息,同時也使得支持集群會話而不被綁定到應用程序容器特定的解決方案而變得微不足道。
實際上,我們不使用Tomcat的HttpSession,而是將session Id值持久化到Redis中。Spring Session將使用由Redis支持的實現替換HttpSession。
主要是通過對請求和相應session的封裝:
SessionRepositoryFilter:
基於Spring Boot的Spring Session介紹。
(1)pom.xml配置
在添加所需的依賴項之后,可以創建Spring Boot配置。感謝自動配置支持,在Redis的支持下設置Spring Session就像在您的應用程序中添加一個配置屬性一樣簡單。
(2)application.properties配置
(3)controller中測試
對於第一次請求會打印,“不存在session”,這時候就會創建session,並保存到Redis中,同時也會返回給瀏覽器。
"spring:session:expirations:1521635340000" set類型
"spring:session:sessions:7e995929-f063-4779-a382-e831bdb88386" 是hash類型
"spring:session:sessions:expires:7e995929-f063-4779-a382-e831bdb88386" string類型
通過 hkeys spring:session:sessions:7e995929-f063-4779-a382-e831bdb88386 ,查詢所有的fields
maxInactiveInterval session活躍時間(多少秒后過期) ,默認為180s 30min
lastAccessedTime 最后一次訪問會話的時間 距離1/1/1970 的毫秒
creationTime session創建時間距離1/1/1970 的毫秒
sessionAttr:user 為session中的一個屬性,一般是在程序中自定義的
微信公眾號