ehcache 使用方法

简介: 引用 :http://blog.csdn.net/zk_zhangkai/article/details/6921924 [java] view plaincopy 一种ehcache实现缓存的方式   [java] view plaincopy /**   *    */   package com.

引用 :http://blog.csdn.net/zk_zhangkai/article/details/6921924

[java]  view plain copy
  1. 一种ehcache实现缓存的方式  
[java]  view plain copy
  1. /** 
  2.  *  
  3.  */  
  4. package com.datang.common.cache.flat;  
  5.   
  6. import java.net.URL;  
  7. import java.util.List;  
  8.   
  9. import net.sf.ehcache.CacheManager;  
  10. import net.sf.ehcache.Ehcache;  
  11. import net.sf.ehcache.Element;  
  12.   
  13. import org.slf4j.Logger;  
  14. import org.slf4j.LoggerFactory;  
  15.   
  16. import com.datang.common.tools.util.ResourceUtils;  
  17.   
  18. /**  
  19.  * 平面缓存,按缓存名区分缓存,key-value结构  
  20.  *   
[java]  view plain copy
  1.  */  
  2. public abstract class FlatCache {  
  3.     /** 
  4.      * 日志 
  5.      */  
  6.     private static final Logger LOGGER = LoggerFactory  
  7.             .getLogger(FlatCache.class);  
  8.   
  9.     /** 
  10.      * 缓存配置文件 
  11.      */  
  12.     private static String CACHE_CONFIG_FILE = "config/flat_cache.xml";  
  13.   
  14.     /** 
  15.      * Ehanche的缓存管理 
  16.      */  
  17.     private static CacheManager cacheManager = null;  
  18.   
  19.     /** 
  20.      * 设置缓存配置文件,最开始设置才有效果,一旦缓存加载则不能改变 
  21.      *  
  22.      * @param cacheConfigFile 
  23.      */  
  24.     public static void setCacheConfigFile(String cacheConfigFile) {  
  25.         CACHE_CONFIG_FILE = cacheConfigFile;  
  26.     }  
  27.   
  28.     /** 
  29.      * 按缺省配置创建缓存 
  30.      *  
  31.      * @param cacheName 
  32.      */  
  33.     public static void createCache(String cacheName) {  
  34.         getCacheManager().addCache(cacheName);  
  35.     }  
  36.   
  37.     /** 
  38.      * 添加缓存 
  39.      *  
  40.      * @param cacheName 
  41.      * @param key 
  42.      * @param value 
  43.      */  
  44.     public static void put(String cacheName, String key, Object value) {  
  45.         Ehcache cache = getCacheManager().getEhcache(cacheName);  
  46.         cache.put(new Element(key, value));  
  47.     }  
  48.   
  49.     /** 
  50.      * 根据缓存名与key获取值 
  51.      *  
  52.      * @param cacheName 
  53.      * @param key 
  54.      * @return 
  55.      */  
  56.     public static Object get(String cacheName, String key) {  
  57.         Ehcache cache = getCacheManager().getEhcache(cacheName);  
  58.         Element e = cache.get(key);  
  59.         return e == null ? null : e.getObjectValue();  
  60.     }  
  61.   
  62.     /** 
  63.      * 获取缓存名 
  64.      *  
  65.      * @return 
  66.      */  
  67.     public static String[] getCacheNames() {  
  68.         return getCacheManager().getCacheNames();  
  69.     }  
  70.   
  71.     /** 
  72.      * 获取缓存的Keys 
  73.      *  
  74.      * @param cacheName 
  75.      * @return 
  76.      */  
  77.     @SuppressWarnings("unchecked")  
  78.     public static List<String> getKeys(String cacheName) {  
  79.         Ehcache cache = getCacheManager().getEhcache(cacheName);  
  80.         return (List<String>) cache.getKeys();  
  81.     }  
  82.   
  83.     /** 
  84.      * 清除所有 
  85.      */  
  86.     public static void clearAll() {  
  87.         getCacheManager().clearAll();  
  88.     }  
  89.   
  90.     /** 
  91.      * 清空指定缓存 
  92.      *  
  93.      * @param cacheName 
  94.      */  
  95.     public static void clear(String cacheName) {  
  96.         getCacheManager().getCache(cacheName).removeAll();  
  97.     }  
  98.   
  99.     /** 
  100.      * 删除指定对象 
  101.      *  
  102.      * @param cacheName 
  103.      * @param key 
  104.      * @return 
  105.      */  
  106.     public static boolean remove(String cacheName, String key) {  
  107.         return getCacheManager().getCache(cacheName).remove(key);  
  108.     }  
  109.   
  110.     /** 
  111.      * 获取缓存大小 
  112.      *  
  113.      * @param cacheName 
  114.      * @return 
  115.      */  
  116.     public static int getSize(String cacheName) {  
  117.         return getCacheManager().getCache(cacheName).getSize();  
  118.     }  
  119.   
  120.     /** 
  121.      * 获取CacheManager 
  122.      *  
  123.      * @return 
  124.      */  
  125.     private static CacheManager getCacheManager() {  
  126.         if (cacheManager != null) {  
  127.             return cacheManager;  
  128.         }  
  129.   
  130.         try {  
  131.             URL url = ResourceUtils.getResource(CACHE_CONFIG_FILE);  
  132.             cacheManager = CacheManager.create(url);  
  133.         } catch (RuntimeException e) {  
  134.             LOGGER.error("init flat cache failed", e);  
  135.             throw e;  
  136.         }  
  137.   
  138.         return cacheManager;  
  139.     }  
  140. }  

xml的配置如下:

[html]  view plain copy
  1. <ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.          xsi:noNamespaceSchemaLocation="ehcache.xsd"  
  3.          updateCheck="true" monitoring="autodetect"  
  4.          dynamicConfig="true">  
  5.      
  6.     <defaultCache  
  7.            maxElementsInMemory="20"  
  8.            eternal="false"  
  9.            overflowToDisk="false"  
  10.            timeToIdleSeconds="1800"  
  11.            timeToLiveSeconds="1800">  
  12.     </defaultCache>  
  13.       
  14.     <cache name="CDG-CACHE"  
  15.            maxElementsInMemory="20"  
  16.            overflowToDisk="false"  
  17.            eternal="false"  
  18.            timeToIdleSeconds="1800"  
  19.            timeToLiveSeconds="1800"  
  20.            memoryStoreEvictionPolicy="LRU"  
  21.            transactionalMode="off"  
  22.      />     
  23. </ehcache>  
相关文章
|
数据采集
24年整理! 各大代理商隧道代理IP价格对比,文末有总结
作为日常需要用到大量代理IP的爬虫从业者,分析各大代理商的价格及IP可用率等属于基操了,很多时候我们遵循自己的消费习惯购买产品,被当韭菜收割一波。 于是我打算分析了一下几家常用代理商的价格,顺便有一些日常小tip分享给大家,不能不明不白就当一颗绿油油的小韭菜。
|
4月前
|
人工智能 前端开发 程序员
用 CodeBuddy Craft 感受真正的 Vibe Coding
CodeBuddy Craft 是腾讯云推出的一款革命性AI编程工具,将复杂的软件开发流程简化为一句话的需求描述。只需输入如“我想开发一个任务管理App”,Craft 即可生成完整可运行的项目,包含页面结构、交互逻辑与数据流转。它支持 MCP 协议,打通测试、构建到部署全流程,让创意快速落地。此外,Craft 还能接入主流开发环境,提供随写随测、版本控制等功能,极大提升开发效率。无论是打造实用工具还是浪漫应用,如为女友设计打卡助手,都能轻松实现。这不仅是一款代码生成器,更是全程陪伴的产品实现伙伴,开启 Vibe Coding 新时代。
|
6月前
|
存储 人工智能 API
AppAgentX:告别重复点击!自我进化式GUI代理自动生成高级操作,效率翻倍
AppAgentX 是西湖大学推出的新型自我进化式 GUI 代理框架,通过记忆和进化机制提升智能手机交互的效率和智能性,支持复杂任务和跨应用操作,显著优于现有方法。
369 0
|
11月前
|
设计模式 JavaScript 前端开发
vue的MVVM模型
MVVM(Model-View-ViewModel)是Vue框架的核心设计模式,将应用分为模型(数据和业务逻辑)、视图(用户界面)和视图模型(数据转换与用户交互)。其特点包括数据驱动、组件化、双向数据绑定及响应式,提高了开发效率和应用质量。【10月更文挑战第2天】
|
7月前
|
机器学习/深度学习 人工智能 编解码
Lumina-Image 2.0:上海 AI Lab 开源的统一图像生成模型,支持生成多分辨率、多风格的图像
Lumina-Image 2.0 是上海 AI Lab 开源的高效统一图像生成模型,参数量为26亿,基于扩散模型和Transformer架构,支持多种推理求解器,能生成高质量、多风格的图像。
439 17
Lumina-Image 2.0:上海 AI Lab 开源的统一图像生成模型,支持生成多分辨率、多风格的图像
|
Dart 前端开发 开发工具
Flutter-VS-Kotlin-跨平台开发市场的最终霸主究竟花落谁家
Flutter-VS-Kotlin-跨平台开发市场的最终霸主究竟花落谁家
|
人工智能 前端开发 开发工具
Agent调研--19类Agent框架对比(上)
Agent调研--19类Agent框架对比(上)
11478 1
|
小程序 JavaScript Java
基于微信小程序的食堂校园预约就餐小程序的设计与实现(源码+lw+部署文档+讲解等)
基于微信小程序的食堂校园预约就餐小程序的设计与实现(源码+lw+部署文档+讲解等)
210 0
|
Docker 容器
docker pull出现错误或速度慢解决办法
在使用 Docker 时遇到拉取镜像速度慢的问题,可以使用国内的镜像源可以提高下载速度。
3750 0