前言

如果一个计算非常耗时,每次获取都重新计算,会消耗很多额外的计算资源。对于这些耗时的计算结果,可以存储在缓存中,下次需要的时候,直接访问缓存中的内容,而不是再重新计算一遍。对于易变性还比较高的数据,可以设置数据有效期,一旦超过有效期,缓存数据被移除,触发重新计算。

下面来看看apache的缓存实现:java cache system。

基本概念

元素(elements)

元素是放入缓存中的对象,可以通过键来访问。

区域(regions)

缓存是多个字典的集合,每个字典被称为region,每个region可以单独配置。比如一个region可以用来存放更新频率低的城市数据,另外一个region用来存放更新频率高的商品数据。

备用(auxiliary)

“auxiliary”是一个region可以使用的可选插件。核心辅助工具是索引磁盘缓存、TCP横向缓存和远程缓存服务器。

配置

cache.ccf

# DEFAULT CACHE REGION
jcs.default=DC
jcs.default.cacheattributes=org.apache.commons.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache
jcs.default.cacheattributes.UseMemoryShrinker=false
jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
jcs.default.elementattributes=org.apache.commons.jcs.engine.ElementAttributes
jcs.default.elementattributes.IsEternal=false
jcs.default.elementattributes.MaxLife=21600
jcs.default.elementattributes.IdleTime=1800
jcs.default.elementattributes.IsSpool=true
jcs.default.elementattributes.IsRemote=true
jcs.default.elementattributes.IsLateral=true# PRE-DEFINED CACHE REGIONS
#jcs.region.testCache1=DC
#jcs.region.testCache1.cacheattributes=org.apache.commons.jcs.engine.Com#positeCacheAttributes
#jcs.region.testCache1.cacheattributes.MaxObjects=1000
#jcs.region.testCache1.cacheattributes.MemoryCacheName=org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache
#jcs.region.testCache1.cacheattributes.UseMemoryShrinker=false
#jcs.region.testCache1.cacheattributes.MaxMemoryIdleTimeSeconds=3600
#jcs.region.testCache1.cacheattributes.ShrinkerIntervalSeconds=60
#jcs.region.testCache1.cacheattributes.MaxSpoolPerRun=500
#jcs.region.testCache1.elementattributes=org.apache.commons.jcs.engine.ElementAttributes
#jcs.region.testCache1.elementattributes.IsEternal=false# AVAILABLE AUXILIARY CACHES
jcs.auxiliary.DC=org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DC.attributes=org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DC.attributes.DiskPath=${user.dir}/jcs_swap
jcs.auxiliary.DC.attributes.MaxPurgatorySize=10000000
jcs.auxiliary.DC.attributes.MaxKeySize=1000000
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DC.attributes.ShutdownSpoolTimeLimit=60

样板代码

package xxl.mathematica.cache;import org.apache.commons.jcs.JCS;
import org.apache.commons.jcs.access.behavior.ICacheAccess;
import org.apache.commons.jcs.engine.behavior.ICacheElement;import java.util.Map;/*** @author zhangliangbo* @since 2020/9/6**/
public class Cache {private static final ICacheAccess<String, Object> I_CACHE_ACCESS = JCS.getInstance("default");/*** 获取值** @param key 键* @return 值*/public static Object get(String key) {return I_CACHE_ACCESS.get(key);}/*** 获取最大空闲时间(超过最大空闲时间,值会被移除)* 单位:s* 默认值参考cache.ccf** @param key 键* @return 值*/public static long idleTime(String key) {return I_CACHE_ACCESS.getCacheElement(key).getElementAttributes().getIdleTime();}/*** 获取最大生存时间(超过最大生存空间,值会被移除,即使在最大空闲时间内被刷新)* 单位:s* 默认值参考cache.ccf** @param key 键* @return 值*/public static long maxLife(String key) {return I_CACHE_ACCESS.getCacheElement(key).getElementAttributes().getMaxLife();}/*** 匹配正则表达式的键值对** @return 键值对*/public static Map<String, Object> match(String pattern) {return I_CACHE_ACCESS.getMatching(pattern);}/*** 放入值** @param key   键* @param value 值*/public static void put(String key, Object value) {I_CACHE_ACCESS.put(key, value);}/*** 放入值,带有效期** @param key         键* @param value       值* @param idleSeconds 有效期*/public static void put(String key, Object value, long idleSeconds) {I_CACHE_ACCESS.put(key, value);ICacheElement<String, Object> element = I_CACHE_ACCESS.getCacheElement(key);element.getElementAttributes().setIdleTime(idleSeconds);}/*** 键不存在时放置** @param key   键* @param value 值*/public static void putNx(String key, Object value) {I_CACHE_ACCESS.putSafe(key, value);}/*** 清空缓存*/public static void clear() {I_CACHE_ACCESS.clear();}/*** 移除键** @param key 键*/public static void remove(String key) {I_CACHE_ACCESS.remove(key);}/*** 获取缓存的大小** @return 缓存大小*/public static int size() {return I_CACHE_ACCESS.getMatching(".*").size();}/*** 获取缓存的容量** @return 缓存容量*/public static int capacity() {return I_CACHE_ACCESS.getCacheAttributes().getMaxObjects();}
}

jcs-基本概念和使用相关推荐

  1. apache common JCS的使用

    前言 对于JCS的研究还是要回到从前使用redis的场景.主要是redis作为分布式缓存,可以集中在内存中缓存大量数据.但是,进程与redis的通信终归是进程间的通信,所有的数据都需要序列化与反序列化 ...

  2. JCS缓存应用和源码解密

    一.理解缓存的三个核心概念 Elements : JCS是一个对象缓存,能放置一些对象或是"elements"并通过key来访问它们,很像一个hashtable.可以想象JCS是一 ...

  3. 使用JCS快速搭建缓存环境

    JCS是Jakarta的项目Turbine的子项目.它是一个复合式的缓冲工具.可以将对象缓冲到内存.硬盘.具有缓冲对象时间过期设定.还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用.对于一 ...

  4. jcs开源缓存框架介绍

    这篇文章写的通俗易懂,转自http://blog.csdn.net/zyujie/article/details/7369463,以作学习. JCS是Jakarta的项目Turbine的子项目.它是一 ...

  5. 五步教你使用JCS快速搭建缓存环境

    JCS是Jakarta的项目Turbine的子项目.它是一个复合式的缓冲工具.可以将对象缓冲到内存.硬盘.具有缓冲对象时间过期设定.还可以通过JCS构建具有缓冲的分布式构架,以实现高性能的应用.对于一 ...

  6. 测试开发进阶——常用中间件概念——JMX监听器理解

    JMX的简介 JMX(Java Management Extensions)是一个为应用程序植入管理功能的框架 ,从Java5.0开始引入到标准Java技术平台中. JMX是一套标准的代理和服务,实际 ...

  7. RPC 笔记(03)— gRPC 概念、安装、编译、客户端和服务端示例

    1. gRPC 概念 gRPC 是 Google 开源的一款高性能的 RPC 框架.GitHub 上介绍如下: gRPC is a modern, open source, high-performa ...

  8. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  9. 数据结构(01)— 算法复杂度概念及常见的复杂度计算

    1. 大 O 表示法 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度.大 O 表示法指出了最糟情况下的运行时间.大 O 表示法在讨论运行时间时, ...

最新文章

  1. centos及ubuntu安装 Puppeteer/rendertron所需的依赖包
  2. ubuntu16.04 安装jdk
  3. Flutter Dart:用数字分组显示大数字
  4. 将JSON数据转换成JAVA的实体类
  5. TIOBE 9 月编程语言榜:Python 居然超越了 C++!
  6. android:#FFFFFFFF 颜色码解析
  7. 赤橙黄绿青蓝紫html颜色,赤橙黄绿青蓝紫,超完整颜色词汇大全
  8. 什么是Windows内核编程
  9. 三端稳压7805和7905稳压原理及典型电路
  10. c语言中6 2等于多少,概率中C62怎么算(6是下标,2标在上面)
  11. 做一个jQuery插件---带“旋转木马”效果的轮播图
  12. OSPF -LSA的类型及特点
  13. 躲避球av_躲避球HTML!
  14. python做平面设计-Python系列干货之——Python与设计模式
  15. 你的java程序有没有内存泄露,java进程在linux系统中rss计算方式是什么样的?
  16. 毕业设计-基于微信小程序的医生随访系统
  17. IU酒店释放轻中端投资活力,开启曲靖酒店新篇章
  18. 计算机微机维修工四级理论知识试卷,计算机维修工中级理论知识试卷1.doc
  19. Excel文件双击打开后无内容且不可编辑,再次双击文件正常显示
  20. 三年级计算机帮助我们学本领,三年级学本领100字作文

热门文章

  1. kafka究竟是干嘛的?
  2. vs中编译时出现error LNK1104: 无法打开文件*.exe
  3. python网络爬虫教程(四):强大便捷的请求库requests详解与编程实战
  4. 互联网晚报 | 奇瑞汽车回应要求员工周六上班;好欢螺回应妇女节争议文案;TVB淘宝首播带货2350万...
  5. 微信JS-SDK 分享到朋友圈 分享给朋友 分享到QQ 拍照或从手机相册中选图 识别音频并返回识别结果 使用微信内置地图查看位置
  6. 解决webupload在同一页面实现多个的最简单方法
  7. H5图片预览及上传(WEB前端)
  8. 玩飞开发板:目前手上有哪些板子
  9. java 连接chatgpt
  10. 判断点是否在四边形内