JetCache
是一个基于 Java 的分布式缓存解决方案,旨在提供高性能和可扩展性。它支持多种后端存储,如 Redis、Hazelcast、Tair 等,可以作为应用程序的缓存层,有效地提升数据访问性能和响应速度。
JetCache 的主要特点包括:
- 多种后端支持:可以根据需求选择不同的后端存储,如 Redis、Hazelcast 等,灵活适配不同的应用场景。
- 注解驱动:提供注解方式简化缓存的配置和使用,使得开发者能够轻松地在业务逻辑中加入缓存支持,减少手动编码工作。
- 二级缓存支持:支持二级缓存,允许在内存缓存和分布式缓存之间进行数据的存取,有效平衡性能和一致性要求。
- 缓存预热和失效策略:提供缓存预热功能,支持多种失效策略,如基于时间、基于数量、基于引用等。
- 高性能和可扩展性:设计上考虑了并发访问和数据一致性问题,以支持高并发和大规模应用场景。
JetCache 在企业级 Java 应用中广泛应用,帮助开发者通过简单的配置和注解,轻松地实现缓存管理,提升系统整体性能和响应速度。
jetcache远程缓存方案
我们之前的缓存控制台过于松散
JetCache 提供了多种远程缓存方案,主要基于不同的后端存储来实现分布式缓存的功能。以下是 JetCache 支持的一些主要远程缓存方案:
- Redis:Redis 是 JetCache 的主要后端之一,它提供了高性能的内存存储和持久化功能,适用于需要快速访问和高并发的场景。JetCache 可以通过 Redis 实现分布式缓存,支持多种缓存操作和数据结构。
- Hazelcast:Hazelcast 是一个开源的分布式内存数据网格,JetCache 可以利用 Hazelcast 来实现分布式缓存,支持分布式数据结构和集群管理,适合需要低延迟和高可用性的场景。
- Tair:Tair 是阿里云提供的分布式缓存服务,JetCache 支持通过 Tair 实现远程缓存,具有良好的可扩展性和高性能,适合在阿里云环境中构建应用。
- Caffeine:虽然 Caffeine 本身是一个本地缓存库,但 JetCache 也支持将其配置为远程缓存方案。在分布式应用场景中,可以通过 Caffeine 来实现基于内存的快速缓存,同时可以与其他远程缓存方案结合使用。
这些远程缓存方案使得开发者可以根据应用的需求选择合适的后端存储,利用 JetCache 提供的注解驱动和简化配置来管理分布式缓存,提升应用的性能和可扩展性。
本地方案
我们用的是ehcache
远程方案
我们使用的redis memcached
我们手动配置服务器IP地址和端口
但是我们还没有遇到
既能用远程缓存方案又能用本地缓存方案的
我们接下来要学习的jetcache就是
两种缓存方案都能用的
我们启动
我们在业务层接口的实现类里面没有用缓存技术
package com.example.demo.service.impl; import com.example.demo.domain.SMSCode; import com.example.demo.service.SMSCodeService; import com.example.demo.utils.CodeUtils; import net.rubyeye.xmemcached.MemcachedClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; @Service public class SMSCodeServiceImpl implements SMSCodeService { @Autowired private CodeUtils codeUtils; @Override public String sendCodeToSMS(String tele) { String code=codeUtils.generator(tele); return code; } @Override public boolean checkCode(SMSCode smsCode) { String code=null; return smsCode.getCode().equals(code); } }
我们把缓存都拿掉了
没有任何缓存
我们回忆之前的操作
记得好像是要加入各种坐标
<!-- jetcache缓存--> <dependency> <groupId>com.alicp.jetcache</groupId> <artifactId>jetcache-starter-redis</artifactId> <version>2.6.2</version> </dependency>
接着配置
远程存储 我们选择的是redis存储
jetcache: remote: default: type: redis host: localhost port: 6379 poolConfig: maxTotal: 50
导入完毕
我们就可以进行使用了
启用使用注解的方式使用缓存
//开启缓存 @EnableCreateCacheAnnotation
这就代表我们可以用注解开启缓存
接下来我们来到业务层的实现类使用缓存
我们直接使用注解创建一个缓存
第一个参数是缓存名
第二个参数是过期时间 是设置缓存的过期时间
之前的过期时间是到处写 但是这里我们进行了一个统一
@CreateCache(name="jetCatch",expire = 3600,timeUnit = TimeUnit.SECONDS) private Cache<String , String> jetCache;
package com.example.demo.service.impl; import com.alicp.jetcache.Cache; import com.alicp.jetcache.anno.CreateCache; import com.example.demo.domain.SMSCode; import com.example.demo.service.SMSCodeService; import com.example.demo.utils.CodeUtils; import net.rubyeye.xmemcached.MemcachedClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CachePut; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import java.util.concurrent.TimeUnit; @Service public class SMSCodeServiceImpl implements SMSCodeService { @Autowired private CodeUtils codeUtils; //声明缓存空间 @CreateCache(name="jetCatch",expire = 3600,timeUnit = TimeUnit.SECONDS) private Cache<String , String> jetCache; @Override public String sendCodeToSMS(String tele) { String code=codeUtils.generator(tele); //放入缓存 jetCache.PUT(tele,code); return code; } @Override public boolean checkCode(SMSCode smsCode) { //取出缓存 String code=jetCache.get(smsCode.getTele()); return smsCode.getCode().equals(code); } }
启动项目
启动成功
用postman进行测试
测试成功
恭喜
我们同样可以使用单独的配置
加上一个area属性即可
jetcache本地缓存方案
本地缓存方案与远程缓存方案一样
有默认设定还有自定义设置
但是我们在设置本地缓存的时候要设置键缓存
指定键转化为字符串的工具
查看maven工程的依赖
我们发现默认导入了一个依赖
fastjson
jetcache: local: default: type: linkedhashmap keyConvertor: fastjson
我们在业务层的实现类里面也要进行修改
//声明缓存空间 @CreateCache(name = "jetCache_",expire = 3600,timeUnit = TimeUnit.SECONDS) private Cache<String , String> jetCache;
我们启动
查看信息
发现我们的配置的东西都有显示
设置缓存为本地缓存方案
//声明缓存空间 @CreateCache(name = "jetCache_",expire = 3600,timeUnit = TimeUnit.SECONDS,cacheType = CacheType.LOCAL) private Cache<String , String> jetCache;