我是中国人,我的英语太差了,我尽力把我的问题描述得很清楚,最近我学到了春季红光会话清理机制,RedisSessionExpirationPolicy类中的清洁方法是'cleanExpiredSessions‘,让我好奇的是’触摸(字符串键)‘方法可以清除过期会话,为什么?我认为'spring:session:sessions:d5e0f376-69d1-4fd4-9802-78eb5a3db144‘的过期时间是fiveMinutesAfterExpires,当春季清理任务运行时,键没有过期,所以“触摸(字符串键)”方法不能清除键。
请向我解释,非常感谢
发布于 2022-07-17 08:51:30
此方法定期运行,并基于以下属性(默认值为每四舍五入):
@Scheduled(cron = "${spring.session.cleanup.cron.expression:0 * * * * *}")它“触摸”密钥不是为了使其过期,而是为了确保它被删除并处理过期事件处理--为所有订阅启动SessionDestroyedEvent。
这意味着处理同步问题,以预测并迫使Redis在到期时间附近触发那些事件,因为Redis并不保证这一点。相同描述的这里:
当会话到期密钥被删除或过期时,键空间通知将触发对实际会话的查找,并触发SessionDestroyedEvent。唯一依赖Redis过期的一个问题是,如果没有访问密钥,Redis无法保证何时会触发过期的事件。具体来说,Redis用于清除过期密钥的后台任务是一个低优先级任务,可能不会触发密钥过期。有关详细信息,请参阅Redis文档中过期事件的时间部分。为了避免过期事件无法保证发生的事实,我们可以确保每个密钥在预期过期时被访问。这意味着,如果TTL在密钥上过期,Redis将删除密钥,并在尝试访问密钥时触发过期事件。
https://stackoverflow.com/questions/71722442
复制相似问题