spring-session之四:Spring Session下的Redis存儲結構


spring-session項目啟動后

127.0.0.1:6379> keys *
1) "spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:user"

運行示例httpsession一次后

查看redis中的值:

127.0.0.1:6379> keys *
1) "spring:session:sessions:expires:fc454e71-c540-4097-8df2-92f88447063f"
2) "spring:session:expirations:1515135000000"
3) "spring:session:index:org.springframework.session.FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME:user"
4) "spring:session:sessions:fc454e71-c540-4097-8df2-92f88447063f"

Redis中的存儲說明:
​1、spring:session是默認的Redis HttpSession前綴(redis中,我們常用’:’作為分割符)。
2、每一個session都會創建3組數據:

第一組:hash結構,spring-session存儲的主要內容

spring:session:sessions:fc454e71-c540-4097-8df2-92f88447063f

hash結構有key和field,如上面的例子:hash的key為"spring:session:sessions"前綴加上fc454e71-c540-4097-8df2-92f88447063f,該key下的field有:

  • field=sessionAttr:qwe,value=123                
  • field=creationTime,value=                         //創建時間
  • field=maxInactiveInterval,value=             //
  • field=lastAccessedTime,value=              //最后訪問時間

見截圖:

第二組:String結構,用於ttl過期時間記錄

spring:session:sessions:expires:fc454e71-c540-4097-8df2-92f88447063f

key為“spring:session:sessions:expires:”前綴+fc454e71-c540-4097-8df2-92f88447063f

value為空

第三組:set結構,過期時間記錄

spring:session:expirations:1515135000000

set的key固定為“spring:session:expirations:1515135000000”,set的集合values為:

  • expires:c7fc28d7-5ae2-4077-bff2-5b2df6de11d8  //(一個會話一條)
  • expires:fc454e71-c540-4097-8df2-92f88447063f  //(一個會話一條)

簡單提一下:redis清除過期key的行為是一個異步行為且是一個低優先級的行為,用文檔中的原話來說便是,可能會導致session不被清除。於是引入了專門的expiresKey,來專門負責session的清除,包括我們自己在使用redis時也需要關注這一點。在開發層面,我們僅僅需要關注第三個key就行了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM