我有一个JSP,大约需要8分钟才能呈现。代码逻辑本身不能变得更高效(它将经常更新,并且基本上由一个尖头发的老板更新)。我试着用缓存层包装它,比如
<%@ taglib uri="/WEB-INF/classes/oscache.tld" prefix="oscache" %>
<oscache:cache time="60">
<div class="pagecontent">
..... my logic
</div>
</oscache:cache>这很好,直到60秒结束。之后的下一个查询将阻塞,直到再次完成8分钟的呈现。我需要一种方法来构建一个模式,比如:
E 210的JSP逻辑输出,这样缓存就可以透明地更新缓存--避免用户等待8分钟h 211G 212我发现至少EHCache可能能够进行一些异步缓存更新,但它似乎并不适用于JSP标记.此外,我还必须为JSP的实际逻辑接受10-20个参数,其中一些参数应该用作缓存的关键。
非常希望使用代码示例和/或指针。坦率地说,我不关心所提供的解决办法是否极其丑陋。我只想要一个简单的5分钟缓存与异步缓存更新,同时考虑一些参数作为一个键。
发布于 2010-05-11 04:29:11
如果缓存的数据在所有用户中都很常见,那么使用JSTL application作用域可以缓存您的JSP片段。如果它是每个用户,那么session作用域。
同时,使用另一个变量记录缓存刷新时间戳,或者相反地记录过期时间。下面是一个例子:
<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
https://stackoverflow.com/questions/2805825
复制相似问题