springboot(缓存)
Cache缓存
1.导入缓存对应的依赖
1 | <dependency> |
2.启用缓存
1 |
|
3.在对应的操作上设置缓存
1 | //@CachePut(value = "smsCode",key = "#phone") 往缓存里放值 |
1 | //验证码 |
springboot整合Redis
1 | cache: |
更换缓存供应商
memcached
pom.xml加入XMemcached依赖
1
2
3
4
5<dependency>
<groupId>com.googlecode.xmemcached</groupId>
<artifactId>xmemcached</artifactId>
<version>2.4.6</version>
</dependency>配置memcached服务器必要属性
1
2
3
4memcached:
servers: localhost:11211 # memcached服务器地址
poolSize: 10 # 连接池的数量
opTimeout: 3000 # 设置默认操作超时关键读取属性配置信息类,加载配置
1
2
3
4
5
6
7
8
9
10
public class XMemcachedPeoprerties {
private String servers;
private int poolSize;
private long opTimeout;
}创建客户端配置类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class XMemcachedConfig {
private XMemcachedPeoprerties memcachedPeoprerties;//属性配置信息类对象
public MemcachedClient getMemcachedClient() throws IOException {
MemcachedClientBuilder memcachedClientBuilder = new XMemcachedClientBuilder(memcachedPeoprerties.getServers());
memcachedClientBuilder.setConnectionPoolSize(memcachedPeoprerties.getPoolSize());
memcachedClientBuilder.setOpTimeout(memcachedPeoprerties.getOpTimeout());
MemcachedClient memcachedClient = memcachedClientBuilder.build();
return memcachedClient;
}
}配置memcached属性
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
public class SMSCodeServiceImpl implements SMSCodeService {
private CodeUtils codeUtils;
/*@Override
@CachePut(value = "smsCode",key = "#phone")
public String getCode(String phone) {
return codeUtils.generator(phone);
}
@Override
public boolean checkCode(SMSCode smsCode) {
String code = smsCode.getCode();
String cacheCode = codeUtils.get(smsCode.getPhone());
return code.equals(cacheCode);
}*/
//以下是springboot中使用xmemcached
private MemcachedClient memcachedClient;
public String getCode(String phone) {
String code = codeUtils.generator(phone);
try {
memcachedClient.set(phone,10,code);//set(key,过期时间,value)
} catch (Exception e) {
throw new RuntimeException(e);
}
return code;
}
public boolean checkCode(SMSCode smsCode) {
String code = null;
try {
code = memcachedClient.get(smsCode.getPhone()).toString();
} catch (Exception e) {
throw new RuntimeException(e);
}
return smsCode.getCode().equals(code);
}
}
小结:xmemcached客户端加载方式(bean初始化),xmemcached客户端使用方式(set & get)
jetcache
jetCache对SpringCache进行了封装,在原有功能基础上实线了多级缓存、缓存统计、自动刷新、异步调用、数据报表等功能
jetCache设定了本地缓存与远程缓存的多级缓存解决方案
本地缓存(local)
LinkedHashMap
Caffeine
远程缓存(remote)
Redis
Tair
启动缓存(redis远程)
添加jetcache依赖
1
2
3
4
5<dependency>
<groupId>com.alicp.jetcache</groupId>
<artifactId>jetcache-starter-redis</artifactId>
<version>2.6.4</version>
</dependency>开启缓存开关
1
2
3
4
5
6
7
8
9
10
11
//jetcache启用缓存的主开关
public class JetcacheApplication {
public static void main(String[] args)
{
SpringApplication.run(JetcacheApplication.class, args);
}
}配置参数(application.yml里面)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19jetcache:
local:
default:
type: linkedhashmap
keyConvertor: fastjson
remote:
default:
type: redis
host: localhost
port: 6379
poolConfig:
maxTotal: 50
sms:
type: redis
host: localhost
port: 6379
poolConfig:
maxTotal: 50
创建jetcache实例使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class SMSCodeServiceImpl implements SMSCodeService {
private CodeUtils codeUtils;
//声明缓存对象
private Cache<String,String> jetCache;
public String getCode(String phone)
{
String code = codeUtils.generator(phone);
jetCache.put(phone,code);
return code;
}
public boolean checkCode(SMSCode smsCode)
{
return smsCode.getCode().equals(jetCache.get(smsCode.getPhone()));
}
}
启动方法注解
1
2
3
4
5
6
7
8
9
10
11
12
13
//jetcache启用缓存的主开关
//开启方法注解缓存
public class JetcacheApplication {
public static void main(String[] args)
{
SpringApplication.run(JetcacheApplication.class, args);
}
}
使用方法注解操作缓存
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class BookServiceImpl implements BookService {
private BookDao bookDao;
public Book getById(int id){
Book queryBook = bookDao.selectById(id);
return queryBook;
}
public List<Book> getAll() {
return bookDao.selectList(null);
}
public boolean insert(Book book) {
return bookDao.insert(book) > 0;
}
public boolean update(Book book) {
return bookDao.updateById(book) > 0;
}
public boolean delete(int id) {
return bookDao.deleteById(id) > 0;
}
}
缓存对象必须保障可序列化
1
2
3
4
5
6
7
8
9
public class Book implements Serializable {//实线序列化接口
private Integer id;
private String name;
private String type;
private String description;
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24jetcache:
statIntervalMinutes: 1//查看缓存统计报告
local:
default:
type: linkedhashmap
keyConvertor: fastjson
remote:
default:
type: redis
host: localhost
port: 6379
valueEncode: java
valueDecode: java
keyConvertor: fastjson
poolConfig:
maxTotal: 50
sms:
type: redis
host: localhost
port: 6379
keyConvertor: fastjson
poolConfig:
maxTotal: 50
J2cache
导入相关的坐标
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<dependency>
<groupId>net.oschina.j2cache</groupId>
<artifactId>j2cache-core</artifactId>
<version>2.8.2-release</version>
</dependency>
<dependency>
<groupId>net.oschina.j2cache</groupId>
<artifactId>j2cache-spring-boot2-starter</artifactId>
<version>2.8.0-release</version>
</dependency>在application.ymi里定义j2cache配置文件
1
2j2cache:
config-location: j2cache.properties配置j2cache配置文件
1
2
3
4
5
6
7
8
9
10
11#1级缓存
j2cache.L1.provider_class = ehcache
ehcache.config.xml = ehcache.xml
#2级缓存
j2cache.L2.provider_class =net.oschina.j2cache.cache.support.redis.SpringRedisProvider
j2cache.L2.config_section = redis
redis.hosts = localhost:6379
#1级缓存中的数据如何到达二级缓存
j2cache.broadcast =net.oschina.j2cache.cache.support.redis.SpringRedisPubSubPolicy创建与配置ehcache.xml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">
<!--设置磁盘存储路径-->
<diskStore path="D:\\ehcache\\"/>
<defaultCache
maxElementsInMemory="1000"
eternal="false"
timeToIdleSeconds="1800"
timeToLiveSeconds="1800"
overflowToDisk="true">
</defaultCache>
</ehcache>
使用cacheChannel对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class SMSCodeServiceImpl implements SMSCodeService {
private CodeUtils codeUtils;
private CacheChannel cacheChannel;
public String getCode(String phone)
{
String code = codeUtils.generator(phone);
cacheChannel.set("sms",phone,code);
return code;
}
public boolean checkCode(SMSCode smsCode)
{
String code = cacheChannel.get("sms",smsCode.getPhone()).asString();
return smsCode.getCode().equals(code);
// return smsCode.getCode().equals(null);
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 JustBecause の blog!
评论