当前位置:首页 > 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缓存框架,支持分布式缓存和持久化。

添加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>

启用缓存并配置:

@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应用的性能。

java如何使用缓存

分享给朋友:

相关文章

react如何使用路由

react如何使用路由

使用 React Router 的基本方法 React Router 是 React 应用中实现路由功能的核心库。以下是基本使用方法: 安装 React Router 依赖包: npm insta…

如何使用ink react

如何使用ink react

安装 Ink 和 React 在项目目录下运行以下命令安装 Ink 和 React 的依赖: npm install ink react 创建基础组件 创建一个简单的 Ink 组件,例如 Hello…

vue实现图片缓存

vue实现图片缓存

实现图片缓存的方案 在Vue项目中实现图片缓存可以通过多种方式,以下列举几种常见且有效的方法: 使用Service Worker缓存图片 通过注册Service Worker实现离线缓存,利用Ca…

vue实现路由缓存

vue实现路由缓存

Vue 路由缓存实现方法 在 Vue 项目中,可以通过 keep-alive 组件和路由配置实现页面缓存,避免重复渲染和保持组件状态。 使用 keep-alive 包裹路由视图 在根组件或布局组件…

vue实现强缓存

vue实现强缓存

Vue 实现强缓存的常见方法 在 Vue 项目中实现强缓存通常通过配置 HTTP 缓存头或结合构建工具(如 Webpack)实现。以下是几种典型方法: 配置 Webpack 输出文件名哈希 通过…

vue路由实现缓存

vue路由实现缓存

Vue 路由实现缓存的常用方法 使用 <keep-alive> 组件 在 Vue 中可以通过 <keep-alive> 组件缓存路由组件,避免重复渲染。需要将 <keep…