前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Java性能提升利器——本地缓存,你用上了吗?

Java性能提升利器——本地缓存,你用上了吗?

作者头像
大风写全栈
发布2024-11-27 15:39:28
发布2024-11-27 15:39:28
11500
代码可运行
举报
文章被收录于专栏:锤子代码锤子代码
运行总次数:0
代码可运行

什么情况用本地缓存?

查询多,但更新少的数据:比如字典数据,用户信息等等。

比较明显的场景是字典数据,之前遇到过每个查询都必须用到字典数据。

可能有人喜欢在数据库里面连表查询,这也是一种方案。

但假如我们要查询的表有几百万或者上千万数据,这时候再去连表就不划算了。更简单的方案是,把字典或者小一些的表数据查询回来,放到本地缓存里面。

在Java代码中进行整合,会发现速度很快。

这种方式有个限制,就是字典数据不能太大了。比如字典里面几万条,那用了本地缓存作用也不大。

本地缓存和Redis

我为什么不用Redis?

首先Redis每次还是会联网去取值,对于字典这一类的,有点多此一举了。

另外存在Redis中,相对来说比从数据库查询数据快,还是无法与本地缓存相提并论。

Redis虽然香,但在这个场景下,本地缓存更香一些。

选哪个本地缓存?

Caffeine!

Spring Boot官方默认本地缓存实现,Spring严选。

简单来一句,Caffeine底层其实是用ConcurrentMap封装的,只不过框架实现了丰富的缓存策略,高性能,易于使用的API,和Spring Boot结合起来使用更方便等等。

来个🌰

1. 引入依赖

代码语言:javascript
代码运行次数:0
复制
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.1.8</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

2. 启用缓存

代码语言:javascript
代码运行次数:0
复制
@SpringBootApplication
// 用下面的注解启用缓存.
@EnableCaching
public class ServerApplication{

    // ...其余代码
}

3. 在Service中使用

代码语言:javascript
代码运行次数:0
复制
@Override
@Cacheable(
      value = "rrs-dict",
      key = "#rrOrder.areaCode+'-'+#rrOrder.userId",
      unless = "#result==null")
  public OrderDict queryOrderDict(RrOrder rrOrder) {
    // ... 其它代码
}

除了@Cacheable之外,@CachePut可以更新缓存中的数据,@CacheEvict可以清除缓存中的数据。

更新缓存中的数据:

代码语言:javascript
代码运行次数:0
复制
@CachePut(value = "rrs-dict", "#rrOrder.areaCode+'-'+#rrOrder.userId")
public OrderDict updateDict(RrOrder rrOrder) {
    // ... 其它代码
}

清除缓存中的数据:

代码语言:javascript
代码运行次数:0
复制
@CacheEvict(value = "rrs-dict", "#rrOrder.areaCode+'-'+#rrOrder.userId")
public OrderDict updateDict(RrOrder rrOrder) {
    // ... 其它代码
}

清除所有:

代码语言:javascript
代码运行次数:0
复制
@CacheEvict(value = "rrs-dict", allEntries = true)
public void clearDict() {
    // ... 其它代码
}

你学会了吗?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-11-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 锤子代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档