当前位置:首页 > Java

java如何使用缓存

2026-02-05 12:53:47Java

缓存的基本概念

缓存是一种临时存储数据的机制,用于提高系统性能,减少对数据库或外部服务的频繁访问。Java中可以通过多种方式实现缓存,包括内置缓存框架、第三方库或自定义实现。

使用Java内置缓存

Java提供了简单的缓存机制,例如使用HashMapConcurrentHashMap实现内存缓存。

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class SimpleCache<K, V> {
    private final Map<K, V> cache = new ConcurrentHashMap<>();

    public void put(K key, V value) {
        cache.put(key, value);
    }

    public V get(K key) {
        return cache.get(key);
    }

    public void remove(K key) {
        cache.remove(key);
    }
}

使用Guava Cache

Google Guava库提供了强大的缓存功能,支持过期策略、最大容量限制等。

添加Maven依赖:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.1-jre</version>
</dependency>

示例代码:

import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;

public class GuavaCacheExample {
    public static void main(String[] args) {
        Cache<String, String> cache = CacheBuilder.newBuilder()
                .maximumSize(100) // 最大缓存条目数
                .expireAfterWrite(10, TimeUnit.MINUTES) // 写入后10分钟过期
                .build();

        cache.put("key1", "value1");
        String value = cache.getIfPresent("key1");
        System.out.println(value);
    }
}

使用Caffeine Cache

Caffeine是高性能的Java缓存库,比Guava Cache更高效。

添加Maven依赖:

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

示例代码:

import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;

public class CaffeineCacheExample {
    public static void main(String[] args) {
        Cache<String, String> cache = Caffeine.newBuilder()
                .maximumSize(100)
                .expireAfterWrite(10, TimeUnit.MINUTES)
                .build();

        cache.put("key1", "value1");
        String value = cache.getIfPresent("key1");
        System.out.println(value);
    }
}

使用Ehcache

Ehcache是一个成熟的Java缓存框架,支持分布式缓存和持久化。

java如何使用缓存

添加Maven依赖:

<dependency>
    <groupId>org.ehcache</groupId>
    <artifactId>ehcache</artifactId>
    <version>3.10.8</version>
</dependency>

示例代码:

import org.ehcache.Cache;
import org.ehcache.CacheManager;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.config.builders.CacheManagerBuilder;
import org.ehcache.config.builders.ResourcePoolsBuilder;

public class EhcacheExample {
    public static void main(String[] args) {
        CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();
        cacheManager.init();

        Cache<String, String> cache = cacheManager.createCache("myCache",
                CacheConfigurationBuilder.newCacheConfigurationBuilder(
                        String.class, String.class,
                        ResourcePoolsBuilder.heap(100)));

        cache.put("key1", "value1");
        String value = cache.get("key1");
        System.out.println(value);

        cacheManager.close();
    }
}

使用Spring Cache

Spring框架提供了缓存抽象,支持多种缓存实现(如Caffeine、Ehcache、Redis)。

添加Maven依赖(以Spring Boot为例):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>

启用缓存并配置:

java如何使用缓存

@SpringBootApplication
@EnableCaching
public class MyApp {
    public static void main(String[] args) {
        SpringApplication.run(MyApp.class, args);
    }
}

使用缓存注解:

@Service
public class UserService {
    @Cacheable(value = "users", key = "#id")
    public User getUserById(Long id) {
        // 模拟数据库查询
        return userRepository.findById(id);
    }

    @CacheEvict(value = "users", key = "#id")
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

分布式缓存(Redis)

对于分布式系统,可以使用Redis作为缓存。

添加Maven依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

配置Redis连接:

spring:
  redis:
    host: localhost
    port: 6379

使用RedisTemplate:

@Autowired
private RedisTemplate<String, String> redisTemplate;

public void setValue(String key, String value) {
    redisTemplate.opsForValue().set(key, value);
}

public String getValue(String key) {
    return redisTemplate.opsForValue().get(key);
}

缓存策略选择

  • 内存缓存:适用于单机应用,如Guava、Caffeine。
  • 分布式缓存:适用于微服务或集群,如Redis、Ehcache分布式模式。
  • Spring Cache:提供统一的缓存抽象,便于切换实现。

通过合理选择缓存框架和策略,可以显著提升Java应用的性能。

分享给朋友:

相关文章

vue缓存实现原理

vue缓存实现原理

Vue 缓存实现原理 Vue 中的缓存主要通过 keep-alive 组件实现,用于缓存动态组件或路由组件,避免重复渲染和销毁,提升性能。 keep-alive 的核心机制 keep-alive 是…

vue中实现页面缓存

vue中实现页面缓存

Vue 中实现页面缓存的常见方法 使用 <keep-alive> 组件<keep-alive> 是 Vue 内置组件,用于缓存动态组件或路由组件。通过包裹需要缓存的组件,可以保…

vue怎么实现页面缓存

vue怎么实现页面缓存

Vue实现页面缓存的常用方法 使用<keep-alive>组件 <keep-alive>是Vue内置组件,用于缓存不活动的组件实例而不是销毁它们。在路由出口外包裹<kee…

react filter如何使用

react filter如何使用

react filter 的基本用法 在 React 中,filter 通常用于筛选数组数据,常见于列表渲染或数据处理场景。filter 是 JavaScript 数组的原生方法,但在 React 中…

react如何使用echarts

react如何使用echarts

安装 ECharts 和 React 适配库 在 React 项目中使用 ECharts 需要安装 ECharts 核心库及其 React 适配库。通过 npm 或 yarn 安装: npm ins…

react如何使用link

react如何使用link

使用 Link 组件进行页面导航 在 React 中,Link 是 react-router-dom 提供的组件,用于在单页应用(SPA)中实现客户端路由导航,避免页面刷新。 安装 react-…