【问题标题】:Storing user data in Cache/session in Spring based web application在基于 Spring 的 Web 应用程序中将用户数据存储在缓存/会话中
【发布时间】:2012-12-09 10:22:37
【问题描述】:

在我的项目中,我们为用户提供搜索功能。用户可以在 2 打搜索参数中设置值。在搜索时,我们获取搜索结果并将搜索参数(由用户选择)存储在数据库中(这会导致严重的性能问题),这样下次用户来搜索页面时,他之前的搜索参数就会在页面加载时加载。

我想将搜索参数存储在会话或缓存中(在整个用户会话期间),当用户注销时将它们提交到数据库,而不是在每次搜索时提交到数据库。当用户进入搜索页面时,DAO 检查值首先在缓存/会话中搜索参数,然后尝试从数据库中获取。 任何人都可以为这个问题提出任何解决方案 使用的技术- Spring 3+ Hibernate 3.6 + Tomcat 6 + EHCache +JSP

【问题讨论】:

  • 所以你的问题不是缓存。它在搜索结果/存储参数处理中表现不佳。在说“我们需要缓存!”之前修复损坏的东西。分析为什么那部分很慢,并修复它。缓存不是灵丹妙药。
  • 让我的朋友冷静下来。如果您了解应用程序的工作原理,我将再次向您解释问题所在。假设用户背靠背进行 15 次搜索,因此我不想将搜索参数写入数据库 15 次以保存搜索参数,而是希望缓存搜索参数并在用户注销时将它们写入数据库(每次将搜索参数输入数据库时​​)覆盖该特定用户之前保存的搜索参数)

标签: hibernate session caching web-applications spring-mvc


【解决方案1】:

看看Spring EhCache 项目。它基本上缓存给定某个(一组)方法签名值的方法的返回值。有很多警告,例如类必须实现接口和方法 args 应该是原语、字符串或可序列化的类(至少实现哈希码)。

开始时正确获取 ehcache.xml conf 文件可能会很棘手,因为您确实需要阅读文档。但是一旦设置好,实施起来就非常简单,而且速度很快。

因此您需要编写方法:从 UI 填充搜索参数,返回它们的方法(缓存),另一种方法将其存储在数据库中,然后使缓存无效/清除。

【讨论】:

  • 我想存储用户特定的数据。我不知道如何配置缓存来存储每个用户每个会话特定的数据,而不是特定于应用程序的数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
相关资源
最近更新 更多