springsession原理及redis缓存处理

1 Redis 中数据

通过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 

Hash 类型。

表示整个 Session 对象。里面包含创建时间、最后访问时间等。

       

sessionAttr:userPwd和sessionAttr:userName:保存在会话的属性

maxInactiveInterval:超时时间,如果值为0或者负数,那就永远不会超时

        spring:session:sessions:expires          

string 类型。

没有什么特殊内容。表示当前 session 过期状态。

c) spring:session:erxpirations:时间戳 

set 类型。

里面存储了这个时间戳是哪个 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"

2:Spring Session 原理

1    SpringSession Session 对象创建及获取流程图

 

Spring 获取 Session 对象的文字说明

用户访问服务器端,服务器端会判断请求对象 Cookie 中是否包含 session 的键值对

  1. 如果 cookie 不包含 Session 键值对会创建 Session 对象,对象中包含:
  2. creationTime创建时间、
  3. lastAccessedTime 最后一次访问时间、
  4. maxInactiveInterval 有效时间。
  5. 如果 cookie 包含 Session 键值对,根据 session 键值对的值拼接 spring:session:value
  6. redis 中取出 session 对象。首先会判断 Session 对象是否过期。如果过期了,需要重新创建。执行步骤 2
  7. 如果没有过期,刷新 lastAccessedTime。刷新后重新放入到 redis 中。

3:Redis对商品的缓存处理

 注解开发:

@Cacheable(标记类或方法可以被缓存)

       @Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值在redis中缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从redis缓存中获取结果,而不需要再次执行该方法。

缓存过期时间的处理?

重写RedisCacheManager配置类

@CachePut(用来更新redis中的缓存数据)

       @CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中

与 @Cacheable的不同:

@Cacheable在每次访问都会检查redis中是否存在对应的key,存在即从redis中拿出来用

@CachePut不会再检查redis中是否存在对应的key,直接覆盖redis中原来key上的数据

@CacheEvict(删除和使用redistemplate删除基本一致:须在controler层使用才有效)

       @CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。

注意:使用@CacheEvict注解的方法必须是controller层直接调用,service里间接调用不生效。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值