`
hongyang321
  • 浏览: 47880 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

使用 JCache

阅读更多

 使用 JCache

Memcache Java API 支持 JCache 标准接口 (javax.cache)。使用 JCache,您可以设置和获取值、控制值在缓存中到期的方法、检查缓存的内容,以及获取有关缓存的统计数据。您也可以使用“监听器”添加设置和删除值时的自定义行为。

JCache API 标准仍在开发中。App Engine 实现尝试实现一个忠实的子集。但是,您可能希望考虑使用低级 Memcache API 来访问底层服务的更多功能。

有关 JCache 的详细信息,请参阅 JSR 107 和相应的 JCache API 规范。
放置和获取值
配置过期
配置设置策略
缓存统计数据
不支持 JCache 功能
低级 API 的功能
获取一个 Cache 实例

使用 javax.cache.Cache 接口的实现来和缓存交互。使用从 CacheManager 上的静态方法获得的 CacheFactory 来获得一个 Cache 实例。以下代码获取具有默认配置的 Cache 实例:
import java.util.Collections;
import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheFactory;

// ...
       Cache cache;

       try {
           CacheFactory cacheFactory = CacheManager.getInstance().getCacheFactory();
           cache = cacheFactory.createCache(Collections.emptyMap());
       } catch (CacheException e) {
           // ...
       }

CacheFactory 的 createCache() 方法采用配置属性的 Map。下文讨论这些属性。要接受默认,请为该方法提供一个空的 Map。
放置和获取值

Cache 的操作类似于 Map:使用 put() 方法存储键和值,然后使用 get() 方法检索值。您可以为键或值使用任何可序列化对象。
       String key;      // ...
       byte[] value;    // ...

       // Put the value into the cache.
       cache.put(key, value);

       // Get the value from the cache.
       value = (byte[]) cache.get(key);

要放置多个值,可调用 putAll() 方法,以 Map 作为其参数。

要从缓存中删除一个值(立即驱逐),请调用 remove() 方法,以键作为其参数。要从应用程序的缓存中删除所有值,请调用 clear() 方法。

containsKey() 方法采用一个键,然后返回一个 boolean(true 或 false)以指示具有该键的值是否存在于缓存中。isEmpty() 方法测试缓存是否为空。size() 方法返回当前在缓存中的值的数目。
配置过期

默认情况下,所有值在缓存保留尽可能长的时间,直至由于内存的压力而被驱逐、应用程序显式删除,或由于其他原因(例如断电)而无法使用。应用程序可以指定值的过期时间,即值可用的最大时间量。过期时间可设置为相对于值的设置时间的时间量或设置为一个绝对的日期和时间。

创建 Cache 实例时使用配置属性指定过期策略。所有随该实例放置的值都将使用同一过期策略。例如,要将 Cache 实例配置为在值设置后一小时(3600 秒)后过期:
import java.util.Map;
import javax.cache.Cache;
import javax.cache.CacheException;
import javax.cache.CacheFactory;
import com.google.appengine.api.memcache.GCacheFactory;

// ...
       Cache cache;

       Map props = new Map;
       props.put(GCacheFactory.EXPIRATION_DELTA, 3600);

       try {
           CacheFactory cacheFactory = CacheManager.getInstance().getCacheFactory();
           cache = cacheFactory.createCache(props);
       } catch (CacheException e) {
           // ...
       }

以下属性控制值过期:
GCacheFactory.EXPIRATION_DELTA:在相对于值的放置时间的给定时间量(以整数秒数表示)后使值过期
GCacheFactory.EXPIRATION_DELTA_MILLIS:在相对于值的放置时间的给定时间量(以整数毫秒数表示)后使值过期
GCacheFactory.EXPIRATION:使值在给定日期和时间(以 java.util.Date 表示)后过期
配置设置策略

默认情况下,在缓存中设置值将在没有具有给定键的值的情况下添加值,而在已经存在具有给定键的值的情况下替换值。您可以将缓存配置为仅添加值(保护现有值)或仅替换值(不添加)。
import java.util.Map;
import com.google.appengine.api.memcache.MemcacheService;

// ...
       Map props = new Map;
       props.put(MemcacheService.SetPolicy.ADD_ONLY_IF_NOT_PRESENT, true);

以下属性控制设置策略:
MemcacheService.SetPolicy.SET_ALWAYS:如果不存在具有该键的值则添加值,如果存在具有该键的值则替换现有值;此为默认
MemcacheService.SetPolicy.ADD_ONLY_IF_NOT_PRESENT:如果不存在具有该键的值则添加值,如果存在该键则不执行任何操作
MemcacheService.SetPolicy.REPLACE_ONLY_IF_PRESENT:如果不存在具有该键的值则不执行任何操作,如果存在具有该键的值则替换现有值
缓存统计数据

应用程序可以检索有关其对于缓存的使用的统计数据。这些统计数据可用于监视和调节缓存行为。可使用 CacheStatistics 对象访问统计数据,该对象可通过调用 Cache 的 getCacheStatistics() 方法获取。

可用统计数据包括缓存命中(获取存在的键)的数目、缓存未命中(获取不存在的键)的数目,以及缓存中值的数目。
import javax.cache.CacheStatistics;

// ...
       CacheStatistics stats = cache.getCacheStatistics();
       int hits = stats.getCacheHits();
       int misses = stats.getCacheMisses();

App Engine 实现不支持重置命中和未命中计数。命中和未命中计数将无限期地保持,但是可能会由于 memcache 服务器的瞬时条件而重置。
不支持 JCache 功能

JCache 监听器 API 部分支持可在应用程序的 API 调用的处理期间执行的监听器,例如 onPut 和 onRemove 监听器。不支持需要后台处理的监听器,如 onEvict。

应用程序可以测试缓存是否包含给定键,但是不能测试缓存是否包含给定值(不支持 containsValue())。

应用程序不可以转储缓存的键或值的内容。

应用程序不可以手动重置缓存统计数据。

不支持异步缓存载入。

put() 方法不返回键的先前已知值。其总是返回 null。
低级 API 的功能

针对 Memcache 服务的低级 API 包括原子递增和递减整数计数器值的方法。

低级 API 公开更多的缓存统计数据,例如自访问最近使用的条目以来的时间量,以及缓存中所有项的总大小。

有关低级 API 的详细信息,请参阅 Memcache Javadoc。

分享到:
评论
1 楼 di1984HIT 2016-06-28  
学习了~~   

相关推荐

    jcache-1.0 jcache-1.0 jcache-1.0

    jcache-1.0jcache-1.0vvjcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-1.0jcache-...

    geronimo-jcache_1.0_spec-1.0-alpha-1-API文档-中文版.zip

    赠送jar包:geronimo-jcache_1.0_spec-1.0-alpha-1.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请

    moviefun-jcache

    Moviefun-JCache 该项目演示了使用 JCache、CDI 和 Hazelcast 向现有 Java EE 项目添加集群缓存。 这个 GitHub 存储库有两个分支——一个在添加缓存之前显示应用程序 (master),一个在添加缓存之后显示应用程序 ...

    ehcache-jcache.zip

    ehcache-jcache 是 ehcache 对 JCache 标准 API (JSR107) 的实现。 标签:ehcache

    2017java源码-jug-saxony-camp:该存储库包含我在莱比锡JUG萨克森营地2017年演讲的源代码。讲座讨论了基于JCache

    使用JCache API缓存Java EE应用程序 public class CacheDemo { @CacheResult public int someExpensiveCalculation ( int argOne , String argTwo ) { return new Random () . nextInt(); } } 我们的目标是临时存储...

    SpringBoot笔记-下篇.pdf

    并支持使用JCache(JSR- 107)注解简化我们开发; • Cache接口为缓存的组件规范定义,包含缓存的各种操作集合; • Cache接 口下Spring提供了各种xxxCache的实现;如RedisCache,EhCacheCache , ...

    jcache-1.0.zip

    JSR107 他是接口 面向接口编程 Java Caching定义了5个核心接口,分别是CachingProvider, CacheManager, Cache, Entry和Expiry。 1. CachingProvider定义了创建、配置、获取、管理和控制多个CacheManager。...

    ehcache-jcache-1.2.jar

    jar包,官方版本,自测可用

    geronimo-jcache_1.0_spec-1.0-alpha-1-API文档-中英对照版.zip

    赠送jar包:geronimo-jcache_1.0_spec-1.0-alpha-1.jar;...使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和

    hibernate-jcache-5.3.10.Final.jar

    java运行依赖jar包

    jcache-persistence-example:使用 MapDB 作为持久性提供者的 JCache 示例

    具有持久性的 JCache 示例 使用 Infinispan 作为缓存提供程序和 MapDB 作为持久性提供程序的示例 JavaEE 7 应用程序。 仅使用 JSR 107 标准功能将缓存保留到文件中。 使用 Wildfly 8.2 和 Infinispan 7 进行测试。

    jcache-examples:JSR107 JCache示例

    我在有关JCache的演讲中使用了许多示例。 简单的缓存和配置 CacheLoader,用于通读到后端(可能是RDBMS) CacheWriter,用于写到后端 带有过滤器的CacheListener,以获取有关Cache事件的回调。 EntryProcessor...

    jcache-samples:使用Java进行分布式缓存的Java Colombo Meetup所使用的示例

    jcache-samples 其中包含用于Java分布式Java缓存的Java Colombo Meetup的示例。 [1]这演示了将Javax JCache与Hazelcast用作缓存服务器。 Hazelcast在客户端-服务器模式下运行,其中Hazelcast群集实例与应用程序分开...

    springboot-cache.zip

    Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化我们开发;大家一起来学习cache的用法

    StudentContest.APIThrottleHandler:学生竞赛项目使用的WSO2 APIThrottleHandler

    在此变体中,支持使用JCache库进行集群。 基于WSO2产品中的原始IP调节器,对处理程序流进行了全面检查。 已使用以下消息生成器对从消息上下文中提取电子邮件地址进行了测试: v1.9.1-> org.apache.synapse.commons....

    guide-sessions:有关如何为应用程序创建,使用和缓存HTTP会话数据的指南:

    使用JCache和Hazelcast缓存HTTP会话数据 了解如何为您的应用程序创建,使用和缓存HTTP会话数据。 你会学到什么 什么是会议? 在Internet上,Web服务器不知道您是谁或做什么,因为它正在处理无状态HTTP请求。 HTTP...

    ehcache-jcache-1.5.0-0.5.jar

    jar包,官方版本,自测可用

    jcache-plugin:Jenkins JCache 插件

    Jenkins JCache 插件该插件为实现 (Java Temporary Caching API)的插件提供了基础。 目前插件定义了抽象方法getCacheManager() ,它提供对javax.cache.CacheManager访问。 扩展 JCache 插件的插件必须实现此方法并...

    spymemcached-jcache:支持JCache的spymemcached

    spymemcached-jcache是​​使用spymemcached作为memcache客户端的JSR107 JCache提供程序。 特征 按缓存名称支持名称空间,缓存名称应为\ w + 添加分隔符支持,默认为$。 您可以在网址中设置分隔符,例如memcached...

    couchbase-java-cache:Couchbase Java SDK 2.0 的 JCache 实现

    couchbase-java-cache 这是针对 Couchbase Java SDK... 默认情况下,使用并预期使用“jcache”存储桶(密码“jcache”)。 默认情况下,存储在此存储桶中的缓存数据将其键以缓存名称和下划线为前缀。 可以使用Couchba

Global site tag (gtag.js) - Google Analytics