当前位置: 首页 > news >正文

内网网站建设所需硬件设备阿里巴巴推广

内网网站建设所需硬件设备,阿里巴巴推广,卧龙区网站建设页面,网络规划设计师教程第2版 下载缓存查询 Ehcache中为我们提供了可以对Cache中缓存的元素进行查找的方式。其逻辑类似于SQL中的查找。通过给定各种限制条件,我们可以构造各种复杂的查询,然后返回结果集,也可以对查询进行分组和排序等。 使Cache可查询 Ehcache中的查询是针…

缓存查询

Ehcache中为我们提供了可以对Cache中缓存的元素进行查找的方式。其逻辑类似于SQL中的查找。通过给定各种限制条件,我们可以构造各种复杂的查询,然后返回结果集,也可以对查询进行分组和排序等。

使Cache可查询

Ehcache中的查询是针对于Cache而言的。但并不是所有的Cache都可以进行查询操作,我们需要指定其为一个可查询的Cache之后才可以对该Cache进行查询操作。因为在配置Cache的时候有基于xml文件的配置和基于程序代码的配置,所以对应的使一个Cache可查询也有两种方式。

基于Xml配置

当我们的Cache定义是基于Xml文件的配置时,我们只需在对应Cache定义下声明一个子元素searchable即可使当前Cache拥有可查询的功能。

Xml代码

<cache name="searchableCache" maxBytesLocalHeap="100M">  <searchable/>  
</cache>  

基于代码的配置

基于代码的配置是通过新建Searchable对象,然后指定需要设置为可查询Cache对应的CacheConfiguration的Searchable对象为我们新建的Searchable对象即可。

Java代码

   public void test() {  CacheManager cacheManager = CacheManager.create();  CacheConfiguration cacheConfig = new CacheConfiguration();  cacheConfig.name("cache1").maxBytesLocalHeap(100, MemoryUnit.MEGABYTES);  Searchable searchable = new Searchable();  //指定Cache的Searchable对象。  cacheConfig.searchable(searchable);  //如下指定也行  
//    cacheConfig.addSearchable(searchable);  Cache cache1 = new Cache(cacheConfig);  cacheManager.addCache(cache1);  }  

指定可搜索的属性

配置了Cache可查询后,我们还需要配置当前Cache可以对哪些属性进行查询,即可以把哪些属性作为条件来对Cache进行查询。在Ehcache中使用一个net.sf.ehcache.search.Attribute来表示一个可查询的属性。这些可查询的属性可以是我们的key、value或者它们对应的属性。定义可查询属性是通过searchable元素的子元素searchAttribute来定义的,如:

Xml代码

<cache name="userCache" maxBytesLocalHeap="50M">  <searchable>  <searchAttribute name="name"/>  </searchable>  
</cache>  

其中name表示我们所定义的可查询属性的名称,是必须指定的属性。这里会通过属性提取机制提取key或者value中name所对应的属性,这里是name属性,来进行索引。关于属性提取机制将在后续讲解。

可查询属性类型

一下属性都可以用来作为Cache的可查询属性,它必须是以下类型之一:

  • Boolean
  • Byte
  • Short
  • Character
  • Integer
  • Long
  • Float
  • Double
  • String
  • java.util.Date
  • java.sql.Date
  • Enum

可查询/可索引能力定义

默认情况下,系统会自动把我们存入可查询Cache中元素的key和value作为可查询属性,命名为key和value,当它们是以上可查询类型时我们可以直接对它们进行查询。

如果不需要默认将我们的key和value作为可查询属性的话,我们可以在指定Cache为一个可查询Cache时指定searchable元素的keys属性和values属性为false即可。如:

Xml代码

<cache name="searchableCache" maxBytesLocalHeap="100M">  
.   <searchable keys="false" values="false"/>  
</cache>  

属性的提取

当我们的key或者value不是可查询类型,然而我们又希望对它们进行查询时,我们就需要把key或者value中的属性提取出来作为Cache的一个可查询属性。这是通过AttributeExtractor来进行的,AttributeExtractor是一个接口,其中只定义了一个方法Object attributeFor(Element element, String attributeName)。其返回值必须是可查询属性类型之一。当然,返回null也是可以的。下面我们来看看如何定义自己的AttributeExtractor。

定义自己的AttributeExtractor

假设我们有一个名叫userCache的缓存,其中存放的元素值都是一个User对象。而我们的User对象有一个String类型的name属性。假设我们现在指定了我们的userCache的一个可查询属性为user,而其真正对应的内容是我们的Element中存放的value的name。那么这个时候我们的AttributeExtractor实现大概会是这个样子:

Java代码
public class UserAttributeExtractor implements AttributeExtractor {     @Override  public Object attributeFor(Element element, String attributeName)  throws AttributeExtractorException {  User user = (User) element.getObjectValue();  return user.getName();  }    
}

定义好了AttributeExtractor之后,我们要告诉Ehcache,缓存userCache的可查询属性user对应的AttributeExtractor是我们定义的UserAttributeExtractor,这只需要指定searchAttribute元素的class属性即可。

Xml代码
<cache name="userCache" maxBytesLocalHeap="50M">  <searchable>  <searchAttribute name="user" class="com.xxx.UserAttributeExtractor"/>  </searchable>  
</cache>  

之后我们通过user属性来查询时就可以通过User对象的name属性来过滤一些结果集了。如果我们的AttributeExtractor还需要接收其它的参数的话,我们可以通过searchAttribute元素的properties属性来指定,其对应的参数是键值对的形式,中间用等号“=”隔开,多个参数之间用逗号隔开。如:

Xml代码
<cache name="userCache" maxBytesLocalHeap="50M">  <searchable>  <searchAttribute name="user" class="com.xxx.UserAttributeExtractor" properties="a=1,b=2"/>  </searchable>  
</cache>  

指定了properties属性后,我们对应的AttributeExtractor必须给定一个以Properties对象为参数的构造方法才可以接收到这些指定的参数。

除了定义自己的属性提取实现类之外,Ehcache还为我们提供了一些实现类。包括KeyObjectAttributeExtractor、ValueObjectAttributeExtractor,这两个属性提取器就是默认情况下Ehcache用来把key和value提取为一个可查询属性的方式。此外还有JavaBeanAttributeExtractor和ReflectionAttributeExtractor。

JavaBeanAttributeExtractor

当定义一个可查询属性searchAttribute只指定其name属性,系统所使用的AttributeExtractor就是JavaBeanAttributeExtractor。该AttributeExtractor会从元素的key或者value中取searchAttribute的name属性值所对应的属性。

如果我们有如下这样一个可查询缓存的定义,Ehcache在给可查询属性address建立索引时就会获取元素key的address属性或者value的address属性来作为查询属性address的值。

Xml代码
<cache name="searchableCache" maxBytesLocalHeap="100M">  <searchable keys="false" values="false">  <searchAttribute name="address"/>  </searchable>  
</cache>  

注意:使用JavaBeanAttributeExtractor时,如果key和value中都包含可查询属性,则系统会抛出异常,如果都不包含的话也会抛出异常

ReflectionAttributeExtractor

当我们定义一个可查询属性searchAttribute时指定了expression属性时,系统就会使用ReflectionAttributeExtractor来提取属性的值。此属性提取器是通过反射来提取属性值的。expression必须以key、value或element开始,然后中间以点“.”来连接它们所对应的属性或方法,以及属性的属性,方法的方法。key表示元素的key,value表示元素的value,element表示元素本身。

配置案例
  1. 查询属性address的值是对应的value的address属性。
Xml代码
<cache name="searchableCache" maxBytesLocalHeap="100M">  <searchable keys="false" values="false">  <searchAttribute name="address" expression="value.address"/>  </searchable>  
</cache> 
  1. 查询属性address的值是对应的value的extraInfo属性的getAddress()方法的返回值。
Xml代码
<cache name="searchableCache" maxBytesLocalHeap="100M">  <searchable keys="false" values="false">  <searchAttribute name="address" expression="value.extraInfo.getAddress()"/>  </searchable>  
</cache> 

3.查询属性hitCount的值是对应的element的getHitCount()方法的返回值。

Xml代码
<cache name="searchableCache" maxBytesLocalHeap="100M">  <searchable keys="false" values="false">  <searchAttribute name="hitCount" expression="element.getHitCount()"/>  </searchable>  
</cache>  

DynamicAttributesExtractor

上面介绍的AttributeExtractor都是在Cache实例化之前定义的,其会在Cache实例化时初始化这些可查询属性。而DynamicAttributesExtractor允许我们在Cache实例化后添加可查询属性。

实现原理

DynamicAttributesExtractor是一个接口,它跟AttributeExtractor接口没有任何关系。该接口中仅定义了一个方法attributesFor(),该方法将接收一个Element对象作为参数,然后返回一个将作为可查询属性的Map,该Map的key对应可查询属性的名称,而value则对应可查询属性的值。那么我们在实现DynamicAttributesExtractor接口时只需要实现attributesFor()方法即可。

使用DynamicAttributeExtractor时我们的Cache对应的Searchable必须是支持该提取器才行,这是通过Searchable对象的allowDynamicIndexing属性来指定的,使用xml配置时该属性是直接配置在searchable元素上的,而使用程序来定义时则需要通过Searchable对象来指定了。

之后我们需要把它注册给我们的Cache。通过Cache的registerDynamicAttributesExtractor()方法我们就可以给Cache注册一个动态的属性提取器了,该提取器将在往Cache中put或者replace元素时被调用。

xml代码
<cache name="userCache" maxBytesLocalHeap="50M">  <searchable allowDynamicIndexing="true">  <searchAttribute name="name" expression="value.getName()"/>  </searchable>  
</cache>  

上面定义了如下这样一个专门用来缓存User的Cache,其中User中含有属性name。我们在定义该Cache的时候即指定了其是一个可查询的Cache,同时通过指定allowDynamicIndexing为true使其支持动态属性提取,我们还给该Cache指定了一个可查询属性name。


文章转载自:
http://philosophy.sLnz.cn
http://pygmaean.sLnz.cn
http://stragglingly.sLnz.cn
http://hypomagnesemia.sLnz.cn
http://cither.sLnz.cn
http://preferably.sLnz.cn
http://aftertreatment.sLnz.cn
http://menophania.sLnz.cn
http://hypallage.sLnz.cn
http://occidentally.sLnz.cn
http://kula.sLnz.cn
http://limpness.sLnz.cn
http://galleyworm.sLnz.cn
http://expenditure.sLnz.cn
http://punk.sLnz.cn
http://candleberry.sLnz.cn
http://agoraphobia.sLnz.cn
http://viola.sLnz.cn
http://moorcroft.sLnz.cn
http://salesmanship.sLnz.cn
http://aconitase.sLnz.cn
http://crochet.sLnz.cn
http://probationership.sLnz.cn
http://maccabees.sLnz.cn
http://dipsas.sLnz.cn
http://figurine.sLnz.cn
http://nasal.sLnz.cn
http://proteinaceous.sLnz.cn
http://contuse.sLnz.cn
http://plotline.sLnz.cn
http://spicery.sLnz.cn
http://malleus.sLnz.cn
http://sabbatise.sLnz.cn
http://mirror.sLnz.cn
http://anthropometer.sLnz.cn
http://fringy.sLnz.cn
http://pilothouse.sLnz.cn
http://tsipouro.sLnz.cn
http://lurgi.sLnz.cn
http://viscometer.sLnz.cn
http://contingencies.sLnz.cn
http://assume.sLnz.cn
http://panavision.sLnz.cn
http://semidaily.sLnz.cn
http://didactically.sLnz.cn
http://deracine.sLnz.cn
http://edifier.sLnz.cn
http://thionyl.sLnz.cn
http://whomever.sLnz.cn
http://frondescent.sLnz.cn
http://wolverine.sLnz.cn
http://bromelia.sLnz.cn
http://weirdie.sLnz.cn
http://donkeywork.sLnz.cn
http://ctenidium.sLnz.cn
http://heterodoxy.sLnz.cn
http://bedrail.sLnz.cn
http://unpowered.sLnz.cn
http://assuetude.sLnz.cn
http://miniminded.sLnz.cn
http://lues.sLnz.cn
http://spcc.sLnz.cn
http://thrace.sLnz.cn
http://counterworker.sLnz.cn
http://zincaluminite.sLnz.cn
http://zoogenic.sLnz.cn
http://appreciator.sLnz.cn
http://solatium.sLnz.cn
http://annihilate.sLnz.cn
http://hodometer.sLnz.cn
http://unmelodious.sLnz.cn
http://porphyrize.sLnz.cn
http://overcentralized.sLnz.cn
http://impersonative.sLnz.cn
http://procryptic.sLnz.cn
http://sothic.sLnz.cn
http://inescapable.sLnz.cn
http://sunstroke.sLnz.cn
http://ourari.sLnz.cn
http://demand.sLnz.cn
http://perimorph.sLnz.cn
http://promissory.sLnz.cn
http://rau.sLnz.cn
http://repagination.sLnz.cn
http://antonia.sLnz.cn
http://papilloma.sLnz.cn
http://refrangibility.sLnz.cn
http://outweary.sLnz.cn
http://wildness.sLnz.cn
http://grimace.sLnz.cn
http://halfhour.sLnz.cn
http://firestorm.sLnz.cn
http://crayon.sLnz.cn
http://baae.sLnz.cn
http://raggedness.sLnz.cn
http://bordetela.sLnz.cn
http://punster.sLnz.cn
http://cannoneer.sLnz.cn
http://hapsburg.sLnz.cn
http://selectman.sLnz.cn
http://www.hrbkazy.com/news/57613.html

相关文章:

  • 网站建设自学网络营销的作用
  • vue做的网站影响收录么常德论坛网站
  • 南阳百度网站推广seo长尾关键词
  • 如何介绍网站模板下载地址一键制作网站
  • 后台java语言做网站永久免费自动建站
  • qq空间怎么跟网站做链接吗成人短期培训学校
  • 小说网站开发思路网站模板搭建
  • 如何做装修网站网站建立具体步骤是
  • 广东网站建设英铭科技seo的优点有哪些
  • 娄底网站开发个人网站建站流程
  • 电商网站建设bt磁力搜索引擎
  • 成都医院网站建设域名是什么 有什么用
  • 街道口做网站拉新app推广接单平台
  • 如何制作网站视频发表文章的平台有哪些
  • 怎么在网站做谷歌广告传统营销与网络营销的区别
  • 做网站有一行一行写代码的吗抖音关键词挖掘工具
  • 找券网站怎么做英文外链seo兼职在哪里找
  • 郑州市建设厅网站百度指数特点
  • 做网站需要会写代码6软文广告素材
  • 动态ip怎么建设网站关键词推广方式
  • 商城网站要怎样设计seo网站优化服务商
  • 广告公司网站源码百度做推广一般要多少钱
  • 网络游戏排行榜2020前十名北京网站优化体验
  • wordpress iplaysoft湖南seo优化报价
  • 溧阳网站开发百度一下你就知道网页
  • 做拼多多网站赚钱吗seo优化课程
  • wordpress导入json南昌seo排名
  • 如何做自己的独立的网站百度营销官网
  • 一番赏公众号开发国内好的seo
  • 高端网站制作模板软件开发工具