项目里用了Redis来管理session,但是Redis是怎么存session的一直都没有关注,当被问到Redis是用什么数据类型存session的时候确实会有点懵。以我对session的理解认为应该是用的Hash但是却不能肯定,今天就来看看究竟是怎么存的。
首先在项目中找到了相关的配置RedisOperationsSessionRepository。点进这个类,可以看到上面的注释里写到了这个
Each session is stored in Redis as a Hash. Each session is set and updated using the HMSET command. An example of how each session is stored can be seen below.
这验证了我的猜测,确实是Hash
注释中举了以下例子
HMSET spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe creationTime 1404360000000 maxInactiveInterval 1800 lastAccessedTime 1404360000000 sessionAttr:attrName someAttrValue sessionAttr:attrName2 someAttrValue2
这个Hash以spring:session:sessions:33fdd1b6-b496-4b33-9f7d-df96679d32fe为key其中33fdd1b6-b496-4b33-9f7d-df96679d32fe是sessionId
键值对creationTime 1404360000000表示的是session的创建时间,从1970年1月1日午夜开始的毫秒数
键值对maxInactiveInterval 1800表示的是session的1800秒过期
键值对lastAccessedTime 1404360000000表示的是最后访问session的时间
后面的键值对session中的一些属性了