先看一下spring session在redis中数据结构
A) "spring:session:sessions:39feb101-87d4-42c7-ab53-ac6fe0d91925"
B) "spring:session:expirations:1523934840000"
C) "spring:session:sessions:expires:39feb101-87d4-42c7-ab53-ac6fe0d91925"
A键存储了session的数据信息,过期时间为35分钟,为什么不是30分钟下面再介绍。
但是redis键过期时,就无法访问到键的value了,也就是监听到session过期时,无法获得session中的内容,所以就引入了C键,C键的TTL为30分钟,监听到C键过期时也就代表session过期,A键还有5分钟才会过期,依然可以获取到session的数据
但是redis的键过期时会存在一个bug,就是键过期后不一定会被删除,所以就引入了B键,B键的value是一个set桶,保存着一分钟内应该过期的C键。spring只需要定时去扫描当前分钟对应的B键中的set集合中存储的C键,访问C键以保证redis忘记删除的C键被删除