gpt4 book ai didi

java - Hazelcast - 从 map 中删除过期的 session

转载 作者:行者123 更新时间:2023-11-28 22:07:36 26 4
gpt4 key购买 nike

我的问题是关于 Hazelcast 如何从底层映射中删除过期的 session 。

我正在 Tomcat 上运行一个大型 Java Web 应用程序,它使用基于 cookie 的 session 。请求通过 Hazelcast 的 WebFilter。 WebFilter 配置为连接到外部 Hazelcast 集群并将 session 存储在 map 中。这是 web.xml 过滤器配置的一个子集。

<init-param>
<param-name>use-client</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>map-name</param-name>
<param-value>SessionMap</param-value>
</init-param>

在 web.xml 中,我的 session-timeout设置为 120(即 2 小时)。 Hazelcast map 名为 SessionMap,TTL 为 24 小时。这里的想法是,我们希望结束 2 小时不活动的 session ,但如果有人持续使用该应用程序,我们希望让 session 最多持续 24 小时。

问题是,如果我让 session 空闲,Tomcat 将在 2 小时后终止 session ,但 session 仍将保留在 Hazelcast 映射 (SessionMap) 中,直到 TTL。有什么方法可以让 Hazelcast 在 Tomcat 中过期时自动从底层映射中删除 session ?

应用程序可以有大量 session ,但很少有 session 会在整个 24 小时内保持 Activity 状态,因此我们不想将已经过期的 session 留在 Hazelcast 的内存中。

我正在使用 Hazelcast 3.8。

编辑 在 Hazelcast 文档 ( http://docs.hazelcast.org/docs/3.5/manual/html/websessionreplication.html ) 中,它说:

Hazelcast automatically removes sessions from the cluster if the sessions are expired on the Web Container. This removal is done by com.hazelcast.web.SessionListener, which is an implementation of javax.servlet.http.HttpSessionListener.

这是否仅适用于用于存储 session 的 Hazelcast 集群是嵌入式的?如果是这样,当 session 存储在外部集群中时,是否有实现类似行为的解决方案?

最佳答案

无论您提到的什么设置看起来都是正确的。 SessionListener 应负责在 2 小时后删除过期的 session , map 的 ttl 应负责在 12 小时后使条目过期。您可以从 web.xml 的 init-param 中删除 session-ttl-seconds,因为它对客户端/服务器模式没有影响。

要确认过期 session 是否从 map 中删除,您可以实现一个轻量级的 MapEventListener。

IMap map = hzInstance.getMap("sesssion-map");
map.addEntryListener(new SessionMapEntryListener(), false);

实现 MapEntry 监听器。您也可以根据需要实现其他接口(interface)。例如,EntryAddedListener、EntryRemovedListener、EntryUpdatedListener、EntryEvictedListener

private static class SessionMapEntryListener implements MapListener, EntryExpiredListener {

@Override
public void entryExpired(EntryEvent entryEvent) {
System.out.println("EntryExpiredEvent triggered. Expired Entry = " + entryEvent.getKey());
}
}

关于java - Hazelcast - 从 map 中删除过期的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43217697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com