在我们的应用程序中,我们在HTTPSession中存储了一些数据。现在,我们正在使用redis会话管理器。有没有办法将我们的自定义数据存储在RedisSession而不是HTTPSession中,这样当redis会话到期时,我们的自定义数据也会自动删除?
我正在使用tomcat-redis-session-manager(https://github.com/jcoleman/tomcat-redis-session-manager)
答案 0 :(得分:0)
我不太确定你到底在追求什么,但我会根据你对你的问题的看法来解决问题。
根据the Readme:
管理员依赖Redis的本机过期功能 使自动会话到期的密钥到期以避免开销 不断搜索整个会话列表的过期会话
这意味着除了Redis之外,他们从Redis中提取数据而不是缓存它。
对于您的“自定义数据”,如果您将其存储在缓存 中,则当它过期时,它将不再可用。在最简单的解读你的问题时,这就是你所追求的。
只要Redis有可用内存,就无法实际从内存中删除密钥。当密钥过期时,它不再显示在密钥列表中,并且对密钥中保存的数据的请求将返回空值,而不是密钥到期之前存储在那里的数据。您可以做的最好的事情是在完成数据后将数据设置为空字符串。
如果您要将数据存储在其他位置并希望收到通知,则密钥已过期,这在给定框架的情况下是不可能的,即使是这样我也建议重构以避免产生冲突条件。
现在,从技术上讲,你可以直接与Redis对话并尝试使用Keyspace Notification机制,但此时人们希望避免最终运行并直接与Redis对话。我不确定它是否会为您提供上述后一种情况下要求的通知。
干杯, 比尔