【问题标题】:Store data in redis session to enable automatic expiration when session expires将数据存储在redis session中,启用session过期时自动过期
【发布时间】:2014-09-08 07:20:50
【问题描述】:

在我们的应用程序中,我们在 HTTPSession 中存储了一些数据。现在,我们正在使用 redis 会话管理器。有没有办法将我们的自定义数据存储在 RedisSession 而不是 HTTPSession 中,这样当 redis session 过期时,我们的自定义数据也会自动删除?

我正在使用 tomcat-redis-session-manager (https://github.com/jcoleman/tomcat-redis-session-manager)

【问题讨论】:

    标签: java session tomcat redis


    【解决方案1】:

    我不太确定你到底在追求什么,但我会根据我对你问题的阅读来尝试一下。

    根据the Readme

    manager 依赖 Redis 原生的过期能力 自动会话过期的过期密钥,以避免开销 不断在整个会话列表中搜索过期会话

    这意味着他们从 Redis 中提取数据,而不是在 Redis 之外进行缓存。

    至于您的“自定义数据”,如果您仅将其存储在缓存中,那么当它到期时,它就不再可用了。以最简单的方式阅读您的问题,这就是您所追求的。

    只要 Redis 有可用内存,就没有办法真正从内存中删除密钥。当密钥过期时,它不再显示在密钥列表中,并且对密钥中保存的数据的请求将返回空值,而不是在密钥过期之前存储在那里的数据。您可以做的最好的事情是在完成后将数据设置为空字符串。

    如果您将数据存储在其他地方并希望收到密钥已过期的通知,那么考虑到框架,这是不可能的,即使是这样,我也建议您进行重构以避免产生冲突条件。

    现在,从技术上讲,您可以直接与 Redis 对话并尝试使用 Keyspace Notification 机制,但此时人们希望避免最终运行并一直直接与 Redis 对话。我不确定它是否会为您提供在上述后一种情况下您所要求的通知。

    干杯, 比尔

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 2017-03-02
      • 1970-01-01
      相关资源
      最近更新 更多