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就行了。