首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么'cleanExpiredSessions‘方法中调用的spring会话“触摸”方法可以清除过期会话

为什么'cleanExpiredSessions‘方法中调用的spring会话“触摸”方法可以清除过期会话
EN

Stack Overflow用户
提问于 2022-04-03 01:59:58
回答 1查看 66关注 0票数 0

我是中国人,我的英语太差了,我尽力把我的问题描述得很清楚,最近我学到了春季红光会话清理机制,RedisSessionExpirationPolicy类中的清洁方法是'cleanExpiredSessions‘,让我好奇的是’触摸(字符串键)‘方法可以清除过期会话,为什么?我认为'spring:session:sessions:d5e0f376-69d1-4fd4-9802-78eb5a3db144‘的过期时间是fiveMinutesAfterExpires,当春季清理任务运行时,键没有过期,所以“触摸(字符串键)”方法不能清除键。

请向我解释,非常感谢

EN

回答 1

Stack Overflow用户

发布于 2022-07-17 08:51:30

此方法定期运行,并基于以下属性(默认值为每四舍五入):

代码语言:javascript
复制
    @Scheduled(cron = "${spring.session.cleanup.cron.expression:0 * * * * *}")

它“触摸”密钥不是为了使其过期,而是为了确保它被删除并处理过期事件处理--为所有订阅启动SessionDestroyedEvent。

这意味着处理同步问题,以预测并迫使Redis在到期时间附近触发那些事件,因为Redis并不保证这一点。相同描述的这里:

当会话到期密钥被删除或过期时,键空间通知将触发对实际会话的查找,并触发SessionDestroyedEvent。唯一依赖Redis过期的一个问题是,如果没有访问密钥,Redis无法保证何时会触发过期的事件。具体来说,Redis用于清除过期密钥的后台任务是一个低优先级任务,可能不会触发密钥过期。有关详细信息,请参阅Redis文档中过期事件的时间部分。为了避免过期事件无法保证发生的事实,我们可以确保每个密钥在预期过期时被访问。这意味着,如果TTL在密钥上过期,Redis将删除密钥,并在尝试访问密钥时触发过期事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71722442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档