目录
阿里出的jetCache,对spring的Cache进行了封装 → 看成是一个底层框架,可以替代spring cache
实现本地与远程缓存同时存在的效果
但只能兼容四种缓存
- <dependency>
- <groupId>com.alicp.jetcache</groupId>
- <artifactId>jetcache-starter-redis</artifactId>
- <version>2.6.2</version>
- </dependency>
- spring:
- # 解决jetcache循环依赖问题
- main:
- allow-circular-references: true
-
-
- jetcache:
- # 使用远程缓存
- remote:
- default:
- type: redis
- host: localhost
- port: 6379
- # 该属性必须要有
- poolConfig:
- # 最大连接数
- maxTotal: 50
- # 第2组配置
- sms:
- type: redis
- host: localhost
- port: 6379
- # 该属性必须要有
- poolConfig:
- # 最大连接数
- maxTotal: 50
@EnableCreateCacheAnnotation
用注解@CreateCache注入cache
put(key,value)
get(key)
- package com.qing.service.impl;
-
- import com.alicp.jetcache.Cache;
- import com.alicp.jetcache.anno.CreateCache;
- import com.qing.bean.SMSCode;
- import com.qing.service.SMSCodeService;
- import com.qing.util.CodeUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
-
- import java.util.concurrent.TimeUnit;
-
- @Service
- public class SMSCodeServiceImpl implements SMSCodeService {
-
-
- @Autowired
- CodeUtils codeUtils;
-
- //注意导阿里包alicp的那个
- //注入cache,超时时间默认是秒,
- // @CreateCache(name="jet",expire = 10,timeUnit = TimeUnit.MINUTES)
- // private Cache<String,String> jetCache;
-
- //还可以配置两个这个分别使用
- //area的值就是配置文件里用哪一套jetcache配置的名字,area默认用的default
- @CreateCache(area = "sms",name="jet",expire = 20)
- private Cache<String,String> jetCache2;
-
- //发送验证码
- @Override
- public String sendCode(String phoneNum) {
- String code = codeUtils.generate(phoneNum);
- jetCache2.put(phoneNum,code);
- return code;
- }
-
-
- //比对验证码
- @Override
- public boolean checkCode(SMSCode smsCode) {
- //取出内存中的验证码与传递过来的验证码比对,相同返回true
- String code = smsCode.getCode();
- String cacheCode = jetCache2.get(smsCode.getPhoneNum());
- return code.equals(cacheCode);
- }
- }
测试
别忘了打开redis的服务端
添加依赖和引导类加注解同远程缓存一样,主要区别是以下两点
1 配置文件
- jetcache:
- # 使用本地缓存
- local:
- default:
- type: linkedhashmap
- # 把对象的key转成json字符串
- keyConvertor: fastjson
2 实现类
cacheType = CacheType.LOCAL
- //注意导阿里包alicp的那个
- //注入cache,超时时间默认是秒,
- //cacheType = CacheType.LOCAL:只用本地缓存,还可以有both (默认使用 远程方案)
- @CreateCache(name="jet",expire = 10,timeUnit = TimeUnit.MINUTES,cacheType = CacheType.LOCAL)
- private Cache<String,String> jetCache;
测试
在本地测试都好用,但是远程redis里没有数据
配置说明