比Spring Cache 更好用 更简单的缓存工具 jscache 取名意义为 java simple cache,基于AOP实现,支持注解到接口 自定义单个缓存过期时间配置 ttl,轻松扩展缓存实现,默认实现了jedis,spring-data-redis,还有一个基于本地内存的map

源码仓库 https://github.com/peachyy/jscache.git

注解API

@Cacheable

设置/获取缓存 如果当前KEY对应的缓存存在就直接返回,不存在则调用服务后 再对结果进行缓存。

配置项

  • prefix 缓存前缀
  • key key 是 el 表达式 默认生成后的缓存key为 prefix+key
  • ttl 缓存存活时间(过期时间) 需要具体的缓存实现支持 如常用的redis是支持的
  • argCondition 前置条件过滤 针对参数过滤 满足则执行表达式逻辑
  • returnCondition 后置条件过滤 只有前置条件为true的情况下才能到达后置过滤 为true才会把结果放入缓存中
  • allowNullValue 返回值为空的情况下是否缓存 防止缓存穿透可以支持为true

  @Cacheable(prefix = "user:",key = "#p0",ttl = 60,returnCondition = "#result!=null")
public User getUserById(Integer userId) {
User user=new User();
user.setId(userId);
user.setName("xxx");
log.info("GET getUserById");
return user;
}

  

@CachePut

只是设置(put)缓存 无论缓存是否存在 这里支持设置(put)多个缓存

配置项 与 cacheable类似

  • prefix 缓存前缀
  • key key 是 el 表达式 默认生成后的缓存key为 prefix+key
  • ttl 缓存存活时间(过期时间) 需要具体的缓存实现支持 如常用的redis是支持的
  • argCondition 前置条件过滤 针对参数过滤 满足则执行表达式逻辑
  • returnCondition 后置条件过滤 只有前置条件为true的情况下才能到达后置过滤 为true才会把结果放入缓存中
  • allowNullValue 返回值为空的情况下是否缓存 防止缓存穿透可以支持为true

@CachePut(prefix = "user:",key = "#p0")
@CachePut(prefix = "members:",key = "#p0")
public User getUserById(Integer userId) {
User user=new User();
user.setId(userId);
user.setName("xxx");
log.info("GET getUserById");
return user;
}

  

@CacheEvict

删除缓存 支持删除多个缓存

配置项

  • prefix 缓存前缀
  • key key 是 el 表达式 默认生成后的缓存key为 prefix+key
  • argCondition 前置条件过滤 针对参数过滤 满足则执行表达式逻辑
@CacheEvict(prefix = "members:",key = "#p0")
@CacheEvict(prefix = "user:",key = "#p0",argCondition = "#p0==100")
public User getUserById(Integer userId) {
User user=new User();
user.setId(userId);
user.setName("xxx");
log.info("GET getUserById");
return user;
}

开始使用缓存

如springboot中 标注@EnableCache注解 表示缓存功能启用 只要标注了注解的就会生效。

引入jar

  <dependency>
<groupId>com.peachyy</groupId>
<artifactId>jscache-core</artifactId>
<version>${last.jscache.version}</version>
</dependency>

  

启用缓存 并配置一个缓存实现。

@SpringBootApplication
@EnableCache()
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
} @Bean
public JedisCache cache(){
Properties properties=new Properties();
properties.put("hosts","192.168.0.2:6379");
properties.put("password","bac123");
properties.put("database","0");
return new JedisCache(properties,null);
}

  

这里有一个基于springboot的例子 https://github.com/peachyy/jscache/tree/master/jscache-springmvc-example

更多适配

主要是用于针对部分rpc 如dubbo 当使用@Reference注解 实例没有被spring ioc管理到 就不能到框架AOP 所以提供一些简单的支持 目前仅实现了dubbo的这种情况

模块

  • jscache-annotation 只是注解包 比如标注在接口上 而这个接口需要给其它地方引用 就只需要引用这个jar就好,免得过多产生过多的依赖
  • jscache-core 核心功能实现
  • jscache-dubbo 针对没有被spring管理dubbo service的适配 基于filter实现
  • jscache-springmvc-example 一个springboot 简单例子

序列化以及其它扩展

序列化

序列化只针对值 key默认为String字符,方便监控查看。自定义序列化需要实现 com.peachyy.jscache.core.serialize.Serializer接口。默认的实现有fastJson,jackson,java 自定义的直接传自定义的全类名就行。

如 扩展了一个com.xxx.myJacksonSerializer序列化方式 设置的方式大概就是这样

@EnableCache(serializer="com.xxx.myJacksonSerializer")

  

扩展缓存实现
扩展缓存需要实现com.peachyy.jscache.core.Cache接口,加入spring容器就完事了。不需要复杂的实现

@Bean
public JedisCache cache(){
Properties properties=new Properties();
properties.put("hosts","192.168.0.2:6379");
properties.put("password","bac123");
properties.put("database","0");
return new JedisCache(properties,null);
}

  

和spring cache比起来使用上的功能大部分有,一些设计也参考了它,使用上明显的差别就是支持了ttl过期时间,去掉了cacheManager设计,但是仅不止如此 开发者更易驾驭,一个系统中一般保持一套缓存规范就够了。总之适合就是最好的。

原文:https://blog.seoui.com/2020/08/21/jscache/

有问题可关注公众号联系

更好用 更简单的Java缓存框架 jscache的更多相关文章

  1. Java缓存框架

      JBossCache/TreeCache  JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让你轻松进行Jboss服务器之间的集群工作 ...

  2. Java缓存框架使用EhCache结合Spring AOP

    一.Ehcache简介     EhCache是一个纯Java的进程内缓存框架,具有如下特点:     1. 快速简单,非常容易和应用集成.     2.支持多种缓存策略 .     3. 缓存数据有 ...

  3. 简单的java缓存实现

    扫扫关注"茶爸爸"微信公众号 坚持最初的执着,从不曾有半点懈怠,为优秀而努力,为证明自己而活. 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法 ...

  4. 【转】简单的java缓存实现

    本文转自 http://my.oschina.net/u/866190/blog/188712 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法,每种算法各有各的优 ...

  5. 简单的JAVA MVC框架模式--Java-servlet-JavaBean

    MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...

  6. 5个强大的Java分布式缓存框架推荐

    在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...

  7. Java分布式缓存框架

    http://developer.51cto.com/art/201411/457423.htm 在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓 ...

  8. 5个强大的Java分布式缓存框架

    在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了5 ...

  9. Ehcache缓存框架具体解释

    一.前言 ehcache是一个比較成熟的java缓存框架.它提供了用内存,磁盘文件存储.以及分布式存储方式等多种灵活的cache管理方案.ehcache最早从hibernate发展而来. 因为3.x的 ...

随机推荐

  1. Linux系统查看硬件信息神器,比设备管理器好用100倍!

    大家都知道,当我们的 Linux 系统计算机出现问题时,需要对其排除故障,首先需要做的是找出计算机的硬件信息.下面介绍一个简单易用的应用程序--HardInfo,你可以利用它来显示你电脑的每个硬件方面 ...

  2. paramiko上传文件到Linux

    一.传输单个文件到Linux服务器 import paramiko transport = paramiko.Transport(('host',22)) transport.connect(user ...

  3. PHP入门之函数

    前言 之前对PHP的类型.运算符和流程控制简单说了一下.想了解的,这是地址. PHP入门之类型与运算符 PHP入门之流程控制 下面对函数简单说一下. 函数的基本概念 为完成某一个功能的程序指令的合集, ...

  4. three.js 制作一个三维的推箱子游戏

    今天郭先生发现大家更喜欢看我发的three.js小作品,今天我就发一个3d版本推箱子的游戏,其实webGL有很多框架,three.js并不合适做游戏引擎,但是可以尝试一些小游戏.在线案例请点击博客原文 ...

  5. Pr剪辑

    目录 Pr剪辑教程 入门基础 创建序列类别 处理非正常序列 导出文件 导出设置 导入各类别素材 简单使用: 剪辑素材常用方法 剃刀工具 选择工具 波纹编辑工具 打入点和出点 剪辑速度 整个素材视频速度 ...

  6. Electron构建、打包总结

    提示:Application entry file "main.js" does not exist 解决: package.json中的build模块,添加files " ...

  7. Python机器学习——预测分析核心算法PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:7qi1 在学习和研究机器学习的时候,面临令人眼花缭乱的算法,机器学习新手往往会不知所措.本书从算法和Python语言实现的角度,帮助读者认识机器学习. 本书专注于两类核心的" ...

  8. 浅谈js数组中的length属性

    前言 一位正在学习前端的菜鸟,虽菜,但还未放弃. 内容 首先,我们都知道每个数组都有一个length属性 这个length属性一般我们用来循环遍历的约束,一般我们都会把他认为是该数组里面有几个元素这个 ...

  9. IDEA使用GsonFormat

    安装GsonFormat插件 因为下载了最新版的idea2020.1.3发现GsonFormat在Idea商店不见了,所以去jetbrains官网下载jar包来安装插件https://plugins. ...

  10. 异步文件通道Java NIO你需要了解多少,来看看这篇文章

    在Java 7,AsynchronousFileChannel 被添加到了Java NIO中.使用AsynchronousFileChannel可以实现异步地读取和写入文件数据. 创建一个Asynch ...