更好用 更简单的Java缓存框架 jscache
比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的更多相关文章
- Java缓存框架
JBossCache/TreeCache JBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让你轻松进行Jboss服务器之间的集群工作 ...
- Java缓存框架使用EhCache结合Spring AOP
一.Ehcache简介 EhCache是一个纯Java的进程内缓存框架,具有如下特点: 1. 快速简单,非常容易和应用集成. 2.支持多种缓存策略 . 3. 缓存数据有 ...
- 简单的java缓存实现
扫扫关注"茶爸爸"微信公众号 坚持最初的执着,从不曾有半点懈怠,为优秀而努力,为证明自己而活. 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法 ...
- 【转】简单的java缓存实现
本文转自 http://my.oschina.net/u/866190/blog/188712 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法,每种算法各有各的优 ...
- 简单的JAVA MVC框架模式--Java-servlet-JavaBean
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码 ...
- 5个强大的Java分布式缓存框架推荐
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的 缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了 ...
- Java分布式缓存框架
http://developer.51cto.com/art/201411/457423.htm 在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓 ...
- 5个强大的Java分布式缓存框架
在开发中大型Java软件项目时,很多Java架构师都会遇到数据库读写瓶颈,如果你在系统架构时并没有将缓存策略考虑进去,或者并没有选择更优的缓存策略,那么到时候重构起来将会是一个噩梦.本文主要是分享了5 ...
- Ehcache缓存框架具体解释
一.前言 ehcache是一个比較成熟的java缓存框架.它提供了用内存,磁盘文件存储.以及分布式存储方式等多种灵活的cache管理方案.ehcache最早从hibernate发展而来. 因为3.x的 ...
随机推荐
- Error: no such table: device;的问题的解决,去掉表名device后面的分号;
sqlite> .mode csvsqlite> .import device.txt device;Error: no such table: device;sqlite> .im ...
- rsync 的用法
rsync官方网站: https://www.samba.org/ftp/rsync/rsync.html rsync是可以实现增量备份的工具.配合任务计划,rsync能实现定时或间隔同步,配合ino ...
- Django学习路13_创建用户登录,判断数据库中账号名密码是否正确
在 models.py 中设置数据库表的信息 from django.db import models # Create your models here. class User(models.Mod ...
- 线程_进程间通信Queue合集
# Queue的工作原理 from multiprocessing import Queue q = Queue(3)#初始化一个Queue对象,最多可接收3条put消息 q.put("In ...
- PHP ftp_size() 函数
定义和用法 ftp_size() 函数返回 FTP 服务器上指定文件的大小. 该函数以字节返回指定文件的大小,如果出错则返回 -1. 语法 ftp_size(ftp_connection,file) ...
- PHP imagecolorclosest - 取得与指定的颜色最接近的颜色的索引值
imagecolorclosest — 取得与指定的颜色最接近的颜色的索引值.高佣联盟 www.cgewang.com 语法 int imagecolorclosest ( resource $ima ...
- luogu P4884 多少个1?
LINK:多少个1? 题目要求:\(\sum_{i=0}^{n-1}10^i \equiv k \mod m\) 最小的n. 看起来很难求的样子 这个同余式 看起来只能暴力枚举. 不过既然是同余 我们 ...
- luoguP2154 [SDOI2009]虔诚的墓主人
SDOI2009虔诚的墓主人 喜闻乐见,我终于把此题读懂了..所以可以写了. 其实就是让我们求有多少个十字架 一个十字架的定义为中间有一个空地 周围4个正方向都有k棵树. 不难想到nm的暴力 我们预处 ...
- Python创建一个爬虫项目===从零开始哟!想说的下次 要不要出一期关于pycharm与Python之间的合作
当然,不用爬虫框架,也是可以的 比如说 beauitfulsoup xml http 就可以完美的得到一个爬虫的解决方案! 个人的意思是,新手或者刚入门的可以考虑以上的方式进行练习后 在使用框架 首先 ...
- Taurus.MVC 2.3.4 :WebAPI 文档集成测试功能升级:WebAPI批量自动化测试功能。
前言: 最近升级了一下Taurus.MVC,现在最新版本是:Taurus.MVC 2.3.4,源码版本和nuget同步. 下面分三个步骤介绍下新版本的WebAPI批量自动化测试功能. 1.启用WebA ...