Java 有可能。在用户会话状态下放入一揽子逻辑来缓存搜索结果(可能至少有几kb),这实际上是在寻找内存问题

Java 有可能。在用户会话状态下放入一揽子逻辑来缓存搜索结果(可能至少有几kb),这实际上是在寻找内存问题,java,session,jakarta-ee,Java,Session,Jakarta Ee,相反,您应该有一个单例搜索服务来管理自己的缓存。尽管这在策略上与会话内的缓存类似,但它有几个优点: 您可以在用户之间重复使用通用搜索结果;根据搜索类型的不同,这可能非常重要 您可以在服务层管理缓存大小;像ehcache这样的东西很容易实现,并为您提供了很多可配置性(以及防止内存不足问题的保护) 您可以在服务层管理缓存有效性;i、 e.如果“update item”服务已触发其save()方法,它可以告诉搜索服务使其整个缓存或仅使与新更新/创建的项对应的缓存结果无效 上面的第三点解决了您的主要

相反,您应该有一个单例搜索服务来管理自己的缓存。尽管这在策略上与会话内的缓存类似,但它有几个优点:

  • 您可以在用户之间重复使用通用搜索结果;根据搜索类型的不同,这可能非常重要
  • 您可以在服务层管理缓存大小;像ehcache这样的东西很容易实现,并为您提供了很多可配置性(以及防止内存不足问题的保护)
  • 您可以在服务层管理缓存有效性;i、 e.如果“update item”服务已触发其save()方法,它可以告诉搜索服务使其整个缓存或仅使与新更新/创建的项对应的缓存结果无效

上面的第三点解决了您的主要问题。

考虑到除了添加之外还可以进行删除,这是一个很好的观点。在实践中,我看到了在点击“返回搜索”时搜索的重新运行,这是一件正常的事情……考虑到除了添加之外的删除可能会发生,这是一个很好的观点。在实践中,我看到在点击“返回搜索”的过程中,搜索会像往常一样重新运行……我在想一些类似于您的建议的事情。考虑到您的第三点,缓存api的责任将不再在servlet/控制器层上。我想继续这个,我会阅读cahcing库,我的印象是这些库将是一个配置问题,而不是本质上的编程方法?是的,我已经广泛使用了ehcache,您可以从普通配置中获得所需的一切。查看hibernate中ehcache和oscache的便利包装类,以及它们对应的Spring框架配置。好的,我将进行阅读。我想我的问题的答案是,不要在http会话层做,而是在服务器或数据库层做。我在想一些类似于你建议的事情。考虑到您的第三点,缓存api的责任将不再在servlet/控制器层上。我想继续这个,我会阅读cahcing库,我的印象是这些库将是一个配置问题,而不是本质上的编程方法?是的,我已经广泛使用了ehcache,您可以从普通配置中获得所需的一切。查看hibernate中ehcache和oscache的便利包装类,以及它们对应的Spring框架配置。好的,我将进行阅读。我想我的问题的答案是,不要在http会话层进行,而是在服务器或db层进行。