OSCache - 缓存标签

<cache:cache>是OSCache提供的标签库中最重要的一个标签,包括在标签中的内容将应用缓存机制进行处理,处理的方式将取决于编程者对cache标签属性的设置。

第一次请求到达时,标签中的内容被处理并且缓存起来,当下一个请求到达时,缓存系统会检查这部分内容的缓存是否已经失效,主要是以下几项:
1. 缓存时间超过了cache标签设置的time或者duration属性规定的超时时间;
2. cron属性规定的时间比缓存信息的开始时间更晚;
3. 标签中缓存的内容在缓存后又被重新刷新过;
4. 其他缓存超期设定

如果符合上面四项中的任何一项,被缓存的内容视为已经失效,这时被缓存的内容将被重新处理并且返回处理过后的信息,如果被缓存的内容没有失效,那么返回给用户的将是缓存中的信息。

[color=blue][b]cache标签的属性说明[/b][/color]
(这些属性可以单独使用,也可以根据需要组合使用)
[b]key[/b] - 标识缓存内容的关键词。在指定的作用范围内必须是唯一的。默认的key是被访问页面的URI和后面的请求字符串。你可以在同一个页面中使用很多cache标签而不指定他的key属性,这种情况下系统使用该页面的URI和后面的请求字符串,另外再自动给这些key增加一个索引值来区分这些缓存内容。但是不推荐采用这样的方式。

[b]scope[/b] - 缓存发生作用的范围,可以是application或者session。

[b]time[/b] - 缓存内容的时间段,单位是秒,默认是3600秒,也就是一个小时,如果设定一个负值,那么这部分被缓存的内容将永远不过期。

[b]duration[/b] - 指定缓存内容失效的时间,是相对time的另一个选择,可以使用简单日期格式或者符合USO-8601的日期格式。如:duration='PT5M' duration='5s'等。

[b]refresh[/b] - false 或者true。如果refresh属性设置为true,不管其他的属性是否符合条件,这部分被缓存的内容都将被更新,这给编程者一种选择,决定什么时候必须刷新。

[b]mode[/b] - 如果不希望被缓存的内容增加到给用户的响应中,可以设置mode属性为"silent"。此时被缓存的部分不在页面上显示,而其它任意的mode属性值都会将缓存的部分显示到页面上。

[b]groups[/b] - 指定当前cache标签所属的组,可使用“,”分割组名。这样就可以对缓存项进行分组了。如果缓存项依赖于应用的其它部分或其它数据,分组就有了用武之地——当这种依赖改变时(刷新相关的组),这个组的所有缓存项都将过期。

[b]language[/b] - 使用ISO-639定义的语言码来发布不同的缓存内容(under an otherwise identical key)。要在一个多语言网站上同一段JSP代码不同用户的参数提供不同的语言时,这个属性会很有用。

[b]refreshpolicyclass[/b] - 指定自定义的刷新策略类的全限定类名。这个类继承自com.opensymphony.oscache.web.WebEntryRefreshPolicy

[b]refreshpolicyparam[/b] - 指定任意需要传给refreshpolicyclass的参数。如果没有指定refreshpolicyclass,则这个值不起作用。其它可用的属性还包括:cron 、groups、language、refreshpolicyclass、refreshpolicyparam。


[b][color=darkblue]Cache标签实例分析[/color][/b]
最简单的cache标签用法。使用默认的关键字来标识cache内容,超时时间是默认的3600秒。

<oscache:cache>
<% //自己的JSP代码内容%>
</oscache:cache>


设置time属性为负数使缓存内容永不过期

<oscache:cache time="-1">
<% //自己的JSP代码内容 %>
</oscache:cache>


使用duration属性设置超期时间


使用mode属性使被缓存的内容不加入给客户的响应中

<oscache:cache mode='silent'>
<% //自己的JSP代码内容 %>
</oscache:cache>


用自己指定的字符串标识缓存内容,并且设定作用范围为session。

<oscache:cache key="foobar" scope="session">
<% //自己的JSP代码内容%>
</oscache:cache>


动态设定key值,使用自己指定的time属性设定缓存内容的超时时间,使用动态refresh值决定是否强制内容刷新。因为OSCache使用key值来标识缓存内容,使用相同的key值将会被认为使用相同的的缓存内容,所以使用动态的key值可以自由的根据不同的角色、不同的要求决定使用不同的缓存内容。

<oscache:cache key="<%= product.getId() %>" time="1800" refresh="<%= needRefresh %>">
<% //自己的JSP代码内容%>
</oscache:cache>



flush标签:这个标签用于在运行时刷新缓存。只有运行flush标签后再次访问相关缓存项时才执行刷新。

<oscache:flush key="cacheKey" scope="application" />


usecached标签:必须嵌套在<cache>标签中。告诉所在的<cache>标签是否使用已经缓存的内容(缺省为true,使用缓存的内容)。可以使用这个标签来控制缓存。比如使用<frush>标签刷新某个key的缓存,但可以在必要的地方即使这样的强制刷新也仍然使用缓存内容而不刷新。

<oscache:cache>
<% try { %>
... some jsp content ...
<% } catch (Exception e) { %>
<cache:usecached />
<% } %>
</oscache:cache>


[b][color=darkblue]使用标签的特殊说明[/color][/b]
标签的属性值如果动态生成,则需要先把动态生成的值赋予一个变量,再使用JSP 表达式把动态值赋予对应的属性。

<!--正确的写法:-->
<%
String keyValue =
(String)request.getAttribute("keyValue");
if(keyValue == null)
keyValue = "";
%>
<oscache:cache refresh='<%=keyValue%>'>
......
</oscache:cache >



<!--不正确的写法:-->
<oscache:cache refresh=
'<%=(String)request.getAttribute("keyValue")%>'>
......
</oscache:cache >

属性的值此时为字符串:"<%=(String)request.getAttribute("keyValue")%>"

标签的属性值对boolean是强类型的,比如cache的refresh属性要求为true或false,示例如下:

<!--不正确的写法:-->
<!--正确的写法:-->
<oscache:cache refresh="true">
......
</oscache:cache >
<!--正确的写法:-->
<% String needRefresh =
(String)application.getAttribute("needRefresh");
if(needRefresh == null) needRefresh = "false";
boolean boo =
Boolean.valueOf(needRefresh).booleanValue(); %>
<oscache:cache refresh='<%=boo %>'>
......
</oscache:cache >



<!--不正确的写法:-->
<oscache:cache refresh='<%= needRefresh %>'>
......
</oscache:cache >
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值