当前位置: 首页 > 知识库问答 >
问题:

存储在Spring(HTTP)会话中的数据在销毁期间不会从Redis中删除

张亦
2023-03-14
  1. 在应用程序中创建了会话
  2. 在Redis CLI中运行“keys*”命令,看到一个新条目(如“spring:session:sessions:6b55103a-baf5-4a05-a127-3a9cfa15c164”)
  3. 从应用程序中向会话添加自定义bean
  4. 在Redis CLI中运行“keys*”命令,并看到该bean的另一个新条目(如“\xac\xed\x00\x05t\x00\tcustomer1”,因为bean有一个值为'customer1'的字符串)
  5. 我配置了30秒的自动过期,在此期间未使用应用程序
  6. sessionDestroyEvent被触发并在实现ApplicationListener的侦听器中捕获
  7. 在Redis CLI中运行“keys*”命令,现在为会话创建的第一个条目已经消失,但是自定义bean对象(customer1)仍然留在Redis中

问题:

清理Redis商店是用户的责任吗?如果我的会话中存储了许多数据元素,那么在会话销毁(注销和超时事件)期间,我是否必须手动从redis存储中清除它们。

共有1个答案

郑宏朗
2023-03-14

Session Expiration一节Spring Session reference详细描述了如何清理会话。

从文档中可以看到:

这种方法的一个问题是,Redis无法保证如果他们的密钥没有被访问,过期事件何时会被激发。具体地说,Redis用来清理过期密钥的后台任务是一个低优先级任务,可能不会触发密钥过期。有关更多细节,请参见Redis文档中的过期事件计时部分。

 类似资料:
  • 在我的REST controllers Spring项目中,我想在Redis中存储会话信息。 在我的Application.Properties中,我定义了以下内容: 我还启用了Http Redis会话: 我终于有了一个这样的redis连接工厂: \xac\xx\x00\x05sr\x00\x0ejava.lang.long;\x8b\xe4\x90\xcc\x8f#\xdf\x02\x00\x0

  • 我的应用程序的注销功能面临一个问题。 问题 调用req.session.destroy不会仅在生产中从Sessions MongoDB集合中删除会话数据。 请求命中服务器,logout方法运行,destroy函数没有返回错误,在会话上运行console.log显示它是空的,但在页面刷新上用户仍然登录,检查db.sessions.find()显示会话数据未被触及。 我认为子域的设置与此有关,正如预期

  • 问题内容: 我创建了一个基于会话的简单登录页面。 并添加了一个包含此内容的注销页面 现在,当我关闭浏览器/页面并重新打开它时,会话的值仍然存在。 我想知道如何完全销毁页面/浏览器关闭上的会话。 问题答案: 如果您使用: 关闭浏览器时,您的会话cookie将会被破坏…因此,在关闭浏览器之前,您的会话将是良好的。IE浏览器 您登录并登录,然后关闭浏览器,然后重新打开,再次进入该站点,您将不会登录。

  • 即使在注销后,会话仍保持活动状态。 这是我的登录文件。 公共函数loginAsAdmin($wpUserName,$wpPassword){ } 细节 代码欺骗版本: 2.2.10 PHP版本:操作系统: OS X安装类型:作曲家安装包列表(作曲家显示)我正在使用Lucatume/wp浏览器包进行代码欺骗 这是我的套件配置: class_name:AcceptanceTester模块: 这很好,我

  • 问题: tkinter的函数冻结,因为我的程序中的最后一行, 背景:我正在终端上运行我的程序。它生成一些文本数据,用这些数据创建一个类的实例,然后将我放在一个python会话中,在那里我可以运行方法并测试所有内容。此解释器会话可通过 在这里,我运行了一个“编辑”方法,允许用户在tkinter文本框中编辑生成的文本,然后按下按钮保存并退出。该按钮调用一个函数,该函数保存一个新的txt文件,然后使用以

  • 问题内容: 我正在使用Django和Redis作为会话引擎(也是Celery,但这是其他东西)。它运行完美,我可以看到速度有所提高。 我有一个脚本,每分钟运行一次,以通过某些方法检查活动用户,如果该用户在最近一分钟内未处于活动状态,则该会话将被删除。这样做是为了满足客户的跟踪需求。 在我切换到Redis作为会话引擎之前,该脚本运行良好。实际上,该会话确实已从数据库中删除,但未从Redis中删除。我