jvm进程缓存实现

文章介绍了在Java项目中如何使用Caffeine作为JVM进程缓存来提升性能,避免每次查询都通过Tomcat和数据库。通过添加Caffeine依赖,配置缓存bean,并在Controller中利用lambda表达式实现缓存逻辑,成功减轻数据库负载。下一步计划实现Nginx的本地缓存,涉及Lua脚本编程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前是在linux中实现了redis缓存的高可用集群搭建。

但是实际生产中有一个问题,那就是你每次查询redis缓存的时候,都是需要经由tomcat进行查询,那么你整个项目的性能聚会局限于tomcat的性能。

解决办法也简单,需要我们来实现多级缓存方案:

 

今天先来实现jvm的进程缓存。我是在intellij中进行的jvm进程缓存的演示操作!

项目搭建

先创建一个maven项目,然后写1个接口。这就是一个普通的数据查询接口。

@GetMapping("/stock/{id}")
    public ItemStock findStockById(@PathVariable("id") Long id){
        return stockService.getById(id);
    }

项目测试

页面请求后后台的日志打印:

[nio-8081-exec-3] c.h.item.mapper.ItemMapper.selectOne     : ==> Parameters: 3(Integer), 10001(Long)
[nio-8081-exec-3] c.h.item.mapper.ItemMapper.selectOne     : <==      Total: 1
[nio-8081-exec-9] c.h.i.mapper.ItemStockMapper.selectById  : ==>  Preparing: SELECT item_id AS id,stock,sold FROM tb_item_stock WHERE item_id=?
[nio-8081-exec-9] c.h.i.mapper.ItemStockMapper.selectById  : ==> Parameters: 10001(Long)
[nio-8081-exec-9] c.h.i.mapper.ItemStockMapper.selectById  : <==      Total: 1

正常情况下我们请求这个接口的时候,肯定会查询数据库的。那么为了减轻数据库的压力,今天就来实现jvm的进程缓存。

caffeine使用

pom中先导入caffeine依赖

        <dependency>
            <groupId>com.github.ben-manes.caffeine</groupId>
            <artifactId>caffeine</artifactId>
        </dependency>

编写caffeine的配置类

@Configuration
public class CaffeineConfig {

    @Bean
    public Cache<Long , ItemStock> itemStockCache(){
        return Caffeine.newBuilder()
                .initialCapacity(100) // 初始化大小
                .maximumSize(10_000) //最大值
                .build();
    }
}

再修改controller中的代码

@GetMapping("/stock/{id}")
    public ItemStock findStockById(@PathVariable("id") Long id){
        // 这里使用lamda实现的,如果这个id存在于jvm缓存中,就从缓存中获取,否则就走数据库的查询方法
        return itemStockCache.get(id,key->stockService.getById(key));
    }

重起项目之后再次进行接口请求,发现第一次请求发起的时候,还是走了数据库请求,这是因为当前缓存中还没有数据,不过这个时候会同步在缓存中存储下来。接下来的n次请求就会发现控制台中并没有输出链接数据库的信息。

到此!jvm的进程缓存就实现了。

下一篇将继续实现nginx的本地缓存。不过这门技术是需要进行脚本编写的,而这个脚本语言就是lua,是基于c语言实现的。跟python很像。

写作不易,如果对您有所帮助,请给个关注吧!谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值