栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Caffeine+Redis实现二级缓存以及JMeter性能测试

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Caffeine+Redis实现二级缓存以及JMeter性能测试

概念

缓存能够减少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 set = redisUtils.zGet("blogTop10", 0, -1);
                    if (set != null && !set.isEmpty()){
                        logger.info("load post list from REDIS");
                        //List list = new ArrayList(set);
                        return new ArrayList(set);
                    }else {// redis中也没有数据,从数据库中获取
                        logger.info("load post list from DB.");
                        List list = blogService.findTopBlog();
                        // 存储到redis,并设置过期事件
                        // ZSet -> key:"blogByPraise" value:praise+id score:praise
                        // Hash -> key:praise+id  id value1 user_id value2 title value3 ...
                        return list;
                    }
                }
            });
}
 

具体的缓存时间可以根据自己业务数据的更新频率来确定 ,原则上,本地缓存的时长要比redis更短一些

JMeter测试

下载安装并打开JMeter(此处不做赘述)

    右键创建线程组

    启动后,在1秒内创建100个线程,持续循环60秒

    设置http请求

    随机间隔访问服务器,随机数为0~1s

    添加聚合报告

    先测试请求访问数据库,主要看服务器吞吐量

    在开启缓存

由此可见,服务器吞吐量从16.4/sec提高到了187.9/sec。大幅提高了系统性能。

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号