缓存能够减少IO操作,减轻数据库压力,提高性能。常见的缓存实现方案便是使用Redis,但是Redis缓存也会有网络开销。所以便有了本地缓存与Redis缓存共同存在的方案。常见的就是Caffeine+Redis
对于一些热点数据,我们可以分别将数据缓存到本地缓存Caffeine和Redis中。获取数据时,首先在本地缓存中查询是否存在数据,如果存在则返回。不存在,则去Redis中获取,返回并将数据缓存到Caffeine中。如果Redis中仍不存在,则去数据库中获取,并将返回的数据缓存到Caffeine和Redis中。
本地缓存的缺点是受JVM内存的限制,不适合存放大数据。
代码示例以获取博客系统中首页TOP10文章数据为例
// 热度top10
@GetMapping("/top")
public Result findTopBlog(){
return Result.succ(blogListCache.get("blogTop10"));
}
// 缓存 private LoadingCache> blogListCache; @PostConstruct public void init() { // 初始化帖子列表缓存 blogListCache = Caffeine.newBuilder() .maximumSize(maxSize) .expireAfterWrite(expireSeconds, TimeUnit.SECONDS) .build(new CacheLoader >() { @Override @Nullable public List load(String key) throws Exception { if(key == null || key.length() == 0){ throw new IllegalArgumentException("参数错误!"); } // 先从redis中取数据 Set
具体的缓存时间可以根据自己业务数据的更新频率来确定 ,原则上,本地缓存的时长要比redis更短一些
JMeter测试下载安装并打开JMeter(此处不做赘述)
右键创建线程组
启动后,在1秒内创建100个线程,持续循环60秒
设置http请求
随机间隔访问服务器,随机数为0~1s
添加聚合报告
先测试请求访问数据库,主要看服务器吞吐量
在开启缓存
由此可见,服务器吞吐量从16.4/sec提高到了187.9/sec。大幅提高了系统性能。



