在web.xml中,my的session-timeout
被设置为120(即2小时)。Hazelcast地图名为SessionMap,其TTL为24小时。这里的想法是,我们希望结束2小时不活动的会话,但如果有人持续使用应用程序,我们希望让会话继续最多24小时。
问题是,如果我让一个会话处于空闲状态,Tomcat将在2小时后终止会话,但会话仍将保留在Hazelcast映射(SessionMap)中,直到TTL。当会话在Tomcat中过期时,有什么方法可以让Hazelcast自动从底层映射中删除它们吗?
应用程序可以有大量的会话,并且很少会在整个24小时内保持活动,所以我们不想在Hazelcast的内存中留下已经过期的会话。
我用的是Hazelcast 3.8。
在Hazelcast文档(http://docs.Hazelcast.org/docs/3.5/manual/html/websessionreplication.html)中编辑,它说:
无论你提到的设置看起来都是正确的。SessionListener
应负责在2小时后删除过期的会话,而映射的ttl应负责在12小时后终止条目。可以从web.xml的init-param
中删除session-ttl-seconds
,因为它对客户机/服务器模式没有影响。
要确认是否从map中删除过期的会话,可以实现一个轻量级的MapEventListener。
IMap map = hzInstance.getMap("sesssion-map");
map.addEntryListener(new SessionMapEntryListener(), false);
实现MapEntry侦听器。您还可以根据需要实现其他接口。例如,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());
}
}
我的产品需要对用户发送给其他用户的每条消息进行cronjob处理。此cronjob被添加到服务器上的crontab中。一切正常。现在,一旦任务完成,有没有办法从中删除过期的cronjob条目? 由于消息数量巨大,我的 crontab 不断增长,因此我想清理旧的作业条目。任何巧妙的方法来实现它?
我在Azure cosmosDB中有一个集合,我在其中启用了无默认值的生存时间(TTL)功能。 根据我将在此问题中提到的文档,一切似乎都非常清楚,但仍然缺少一些东西,因为5天后我仍然可以看到TTL为300秒的文档。 符合文件要求: Azure Cosmos DB将在这段时间后自动删除这些项目,因为它们是最后一次修改的。生存时间值以秒为单位进行配置。当您配置TTL时,系统将根据TTL值自动删除过期的
如何在不删除索引映射的情况下从elasticsearch数据库中删除数据? 我是Tire gem,使用删除命令删除我所有的映射并再次运行创建命令。我想避免创建命令一次又一次地运行。 请帮我解决这个问题。
如何将侦听器设置为一个映射,该映射的键有一个复杂的对象,并且我只想侦听具有特定键参数值的条目发生的更改。 例如,我有一个类似于此的代码: 但当一个包含“EN”语言的键的条目被更新时,我的回调函数不会被调用。所以我假设我的谓词是错误的。
我的购物车有两个功能,第一个是退货总价和商品总数量: 这两个函数返回这两个参数: 和: 我可以通过此功能销毁所有购物车会话: 如何删除特定购物车项目?我在使用这个方法,它的工作。但它不会改变总价和总数量:
问题内容: 我有一条路线映射为: 如何在运行时删除/重新映射此路由到空处理程序? 问题答案: 这将删除中间件和/或(获取/发布)路由。在express@4.9.5上测试 请注意,它 要求 中间件/路由功能具有 名称 : 如果该函数是匿名的, 它将不起作用 :