源码:

使用EhcacheCache做二级缓存

使用redis做二级缓存

我们都知道无论是使用redis做二级缓存,还是使用EhchcheCache做二级缓存,都需要去实现Cache接口,并实现其中的方法;使用EhchcheChche做二级缓存mybatis帮我们实现了,我们只需要引入相应的maven 依赖(坐标)即可;而使用Redis做二级缓存我们需要自己去实现Cache接口;

Cache接口中的方法:

package org.apache.ibatis.cache;

import java.util.concurrent.locks.ReadWriteLock;

public interface Cache {
String getId();

void putObject(Object var1, Object var2);

Object getObject(Object var1);

Object removeObject(Object var1);

void clear();

int getSize();

ReadWriteLock getReadWriteLock();
}

下图是EhcacheCache做二级缓存:
image.png
下图是Redis做二级缓存:

image.png

详细代码就不贴出来了;这里贴出测试代码:

@RequestMapping("/findAll")
public String findAll() {
long begin = System.currentTimeMillis();
List<Person> persons = personService.findAll();
long ing = System.currentTimeMillis();
System.out.println(("请求时间:" + (ing - begin) + "ms"));
return JSON.toJSONString(persons);
}
@RequestMapping("/cacheFindAll")
public String cacheByFindAll() {
long begin = System.currentTimeMillis();
List<Person> persons = personService.findAll();
long ing = System.currentTimeMillis();
personService.findAll();
long end = System.currentTimeMillis();
System.out.println(("第一次请求时间:" + (ing - begin) + "ms"));
System.out.println(("第二次请求时间:" + (end - ing) + "ms"));
return JSON.toJSONString(persons);
}

首先我们测试redis做二级缓存;我们先执行findAll方法;测试结果如下:

然后执行cacheByFindAll方法,测试结果如下

image.png
然后我们测试EhcacheCache做和二级缓存,执行findAll方法;测试结果如下:
image.png
后执行cacheByFindAll方法,测试结果如下
image.png
使用Redis做二级缓存,除了第一次时间较长之外,之后的几次都几乎到70-80ms之间;
使用EhcacheCache做二级缓存,除了第一次时间较长之外,之后的几次基本上不花费时间;
是不是差别很大,这就是为什么mybatis帮我们实现了EhcacheCache做二级缓存的方式,虽然说redis很牛X,但得看用到什么地方;用好了事半功倍,用到了不该用的地方得不偿失;