用JSP构建异步缓存模式
我有一个JSP,将需要大约8分钟来呈现。代码逻辑本身无法提高效率(它将经常更新,基本上由一个头发尖尖的老板来更新)。我试着用缓存层包装它,比如用JSP构建异步缓存模式,jsp,caching,asynchronous,Jsp,Caching,Asynchronous,我有一个JSP,将需要大约8分钟来呈现。代码逻辑本身无法提高效率(它将经常更新,基本上由一个头发尖尖的老板来更新)。我试着用缓存层包装它,比如 <%@ taglib uri="/WEB-INF/classes/oscache.tld" prefix="oscache" %> <oscache:cache time="60"> <div class="pagecontent"> ..... my logic </div> </osc
<%@ taglib uri="/WEB-INF/classes/oscache.tld" prefix="oscache" %>
<oscache:cache time="60">
<div class="pagecontent">
..... my logic
</div>
</oscache:cache>
..... 我的逻辑
这很好,直到60秒结束。之后的下一个查询将阻塞,直到8分钟的渲染再次完成。我需要一种构建模式的方法,比如:
非常感谢代码示例和/或指针。坦率地说,我并不在乎提供的解决方案是否极其丑陋。我只需要一个简单的5分钟缓存,异步缓存更新将一些参数作为一个键考虑进去。如果缓存的数据在所有用户中都是通用的,那么使用JSTL
application
scope可以缓存JSP片段。如果是每个用户,则会话
范围
同时,使用另一个变量记录缓存刷新时间戳,或者反过来记录到期时间。下面是一个例子:
<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)>cachedrefreshttimestamp,则在单独的循环中再次获取数据,覆盖回cachedData,并更新cachedrefreshttimestamp