首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JSP构建异步缓存模式

用JSP构建异步缓存模式
EN

Stack Overflow用户
提问于 2010-05-10 19:32:21
回答 1查看 600关注 0票数 1

我有一个JSP,大约需要8分钟才能呈现。代码逻辑本身不能变得更高效(它将经常更新,并且基本上由一个尖头发的老板更新)。我试着用缓存层包装它,比如

代码语言:javascript
复制
<%@ taglib uri="/WEB-INF/classes/oscache.tld" prefix="oscache" %>
<oscache:cache time="60">
  <div class="pagecontent">
  ..... my logic
  </div>
</oscache:cache>

这很好,直到60秒结束。之后的下一个查询将阻塞,直到再次完成8分钟的呈现。我需要一种方法来构建一个模式,比如:

  1. 如果缓存中没有动态内容的版本,则运行实际逻辑(并为后续请求填充缓存)
  2. ,如果缓存中有未过期的动态内容版本,则服务于缓存
  3. 的JSP逻辑输出,如果缓存中有动态内容的过期版本,则运行缓存E 210的JSP逻辑输出,这样缓存就可以透明地更新缓存--避免用户等待8分钟h 211G 212

我发现至少EHCache可能能够进行一些异步缓存更新,但它似乎并不适用于JSP标记.此外,我还必须为JSP的实际逻辑接受10-20个参数,其中一些参数应该用作缓存的关键。

非常希望使用代码示例和/或指针。坦率地说,我不关心所提供的解决办法是否极其丑陋。我只想要一个简单的5分钟缓存与异步缓存更新,同时考虑一些参数作为一个键。

EN

回答 1

Stack Overflow用户

发布于 2010-05-11 04:29:11

如果缓存的数据在所有用户中都很常见,那么使用JSTL application作用域可以缓存您的JSP片段。如果它是每个用户,那么session作用域。

同时,使用另一个变量记录缓存刷新时间戳,或者相反地记录过期时间。下面是一个例子:

代码语言:javascript
复制
<c:if test="${empty cachedData}">
<c:set var="cachedData" scope="application">
<%-- Cached JSP content goes here -->
</c:set>
<c:set var="cachedRefreshTimestamp"
  value="<%= new Long(new java.util.Date().getTime()) %>"
  scope="application"/>
</c:if>

稍后:

如果(系统当前时间+ 5) > cachedRefreshTimestamp,则再次在单独的循环中获取数据,覆盖回cachedData,并更新cachedRefreshTimestamp

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2805825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档