通过springsession存储了用户的session数据,如下:
"spring:session:expirations:1634214780000" 记录了失效时间是哪个session的,指向下面的key
"spring:session:sessions:6317e334-90e9-4f55-a1f5-07492a8c8b2a" 保存了session相关信息(创建时间,session保存的对象信息,最大超时时间:默认1800秒,最后的修改时间)
"spring:session:sessions:expires:6317e334-90e9-4f55-a1f5-07492a8c8b2a" 空值
a) spring:session:sessions:xxx
表示整个 Session 对象。里面包含创建时间、最后访问时间等。
sessionAttr:userPwd和sessionAttr:userName:保存在会话的属性
maxInactiveInterval:超时时间,如果值为0或者负数,那就永远不会超时
spring:session:sessions:expires
没有什么特殊内容。表示当前 session 过期状态。
c) spring:session:erxpirations:时间戳
里面存储了这个时间戳是哪个 session 的。
127.0.0.1:6379> smembers "spring:session:expirations:1634214780000"
1) "\xac\xed\x00\x05t\x00,expires:6317e334-90e9-4f55-a1f5-07492a8c8b2a"
2
127.0.0.1:6379> smembers "spring:session:expirations:1634214780000"
1) "\xac\xed\x00\x05t\x00,expires:6317e334-90e9-4f55-a1f5-07492a8c8b2a"
1 SpringSession 中 Session 对象创建及获取流程图
Spring 获取 Session 对象的文字说明
用户访问服务器端,服务器端会判断请求对象 Cookie 中是否包含 session 的键值对
@Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值在redis中缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从redis缓存中获取结果,而不需要再次执行该方法。
缓存过期时间的处理?
重写RedisCacheManager配置类
@CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中
与 @Cacheable的不同: @Cacheable在每次访问都会检查redis中是否存在对应的key,存在即从redis中拿出来用 @CachePut不会再检查redis中是否存在对应的key,直接覆盖redis中原来key上的数据 |
@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。
注意:使用@CacheEvict注解的方法必须是controller层直接调用,service里间接调用不生效。