java - ehCache 基于Cookie的网页缓存Key

标签 java performance caching cookies ehcache

背景

我希望缓存某些页面的 HTML 响应。由于 ehCache 已在我的应用程序中使用,因此显然需要在那里寻找解决方案。碰巧 ehCache 有一些开箱即用的过滤器,例如 SimplePageCachingFilter可用。

问题

这些过滤器通常使用包含 query string as keys的URL 。就我而言,不同的用户将具有相同的网址,并且该页面的内容将有所不同。我无法在查询字符串中添加用户 ID。因此,也许对我来说,解决方案是基于 cookie 缓存页面 [或使用其他一些唯一的用户 ID] 作为 key 的一部分。

问题

我的问题是如何使用除 SimplePageCachingFilter 使用的 key 之外的其他 key 。该文档建议重写 javax.servlet.http.HttpServletRequest 以考虑重要的 QS 参数,但没有讨论如何完全重写 key 的制定方式。

缺乏示例代码也是一个问题,因此如果有人能给我指出一些可以更好地控制按键的示例代码,我将不胜感激。

此外,如果能够控制使缓存失效,而不是仅仅等待内容自行过期,那就太好了,尽管这对我的应用程序来说并不是必需的。

最佳答案

从SimplePageCachingFilter的源代码中我们可以看到缓存的key是如何构建的:

protected String calculateKey(HttpServletRequest httpRequest) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(httpRequest.getMethod()).append(httpRequest.getRequestURI()).append(httpRequest.getQueryString());
String key = stringBuffer.toString();
return key;

您可以仅重写此方法,以将 session ID(每个用户是唯一的)包含在 key 中(基于 url),例如:

protected String calculateKey(HttpServletRequest httpRequest) {
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append(httpRequest.getSession().getId()).append(httpRequest.getMethod()).append(httpRequest.getRequestURI()).append(httpRequest.getQueryString());
String key = stringBuffer.toString();
return key;

我首先添加 sessionid 的原因是(不同于)可能性,某些 queryString 以有效的 session id 结尾。

关于java - ehCache 基于Cookie的网页缓存Key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22438936/

相关文章:

java - 如何从jar中获取文件?

mysql - Rails ActiveRecord/SQL 查询最佳实践

javascript - 测量页面负载和 iframe 负载

java - 如何删除 Volley 中特定的 json feed 缓存? clear() 有效,但删除(url) 无效

ios - 无法清除 UIWebView 缓存

java - 从 Java SDK 运行 Amazon EMR 作业

java - JAXB 2.1 为生成的类实现 Comparable<T>

java - 服务器未使用套接字编程在Java中发送响应

c# - 在多个大文本文件中搜索多个字符串的最快方法

css - System.Web.Optimization 捆绑 css js 缓存