当前位置:首页 > Java

java如何缓存数据

2026-03-04 00:27:52Java

Java 缓存数据的常见方法

使用 HashMap 实现简单缓存

import java.util.HashMap;
import java.util.Map;

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

    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

Guava Cache 提供了更强大的缓存功能,包括过期策略和缓存大小限制。

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

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

    public static void put(String key, String value) {
        cache.put(key, value);
    }

    public static String get(String key) {
        return cache.getIfPresent(key);
    }
}

使用 Caffeine Cache

Caffeine 是一个高性能的 Java 缓存库,功能比 Guava Cache 更强大。

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

public class CaffeineCacheExample {
    private static final Cache<String, String> cache = Caffeine.newBuilder()
            .maximumSize(100)
            .expireAfterWrite(10, TimeUnit.MINUTES)
            .build();

    public static void put(String key, String value) {
        cache.put(key, value);
    }

    public static String get(String key) {
        return cache.getIfPresent(key);
    }
}

使用 Ehcache

Ehcache 是一个广泛使用的开源 Java 缓存框架。

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 {
    private static CacheManager cacheManager;
    private static Cache<String, String> cache;

    static {
        cacheManager = CacheManagerBuilder.newCacheManagerBuilder().build();
        cacheManager.init();

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

    public static void put(String key, String value) {
        cache.put(key, value);
    }

    public static String get(String key) {
        return cache.get(key);
    }
}

使用 Spring Cache 注解

Spring 框架提供了缓存抽象,可以通过注解方式轻松实现缓存。

import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;

@Service
public class BookService {
    @Cacheable("books")
    public Book getBookByIsbn(String isbn) {
        // 这个方法只有在缓存中没有对应数据时才会执行
        return findBookInSlowSource(isbn);
    }

    private Book findBookInSlowSource(String isbn) {
        // 模拟耗时操作
        return new Book(isbn, "Some book");
    }
}

使用 Redis 作为分布式缓存

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

import redis.clients.jedis.Jedis;

public class RedisCacheExample {
    private static final String REDIS_HOST = "localhost";
    private static final int REDIS_PORT = 6379;

    public static void set(String key, String value) {
        try (Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT)) {
            jedis.set(key, value);
        }
    }

    public static String get(String key) {
        try (Jedis jedis = new Jedis(REDIS_HOST, REDIS_PORT)) {
            return jedis.get(key);
        }
    }
}

缓存策略考虑因素

  • 缓存大小:设置合理的缓存大小限制
  • 过期策略:基于时间或基于访问频率
  • 淘汰策略:LRU、LFU 等
  • 持久化:是否需要将缓存数据持久化到磁盘
  • 线程安全:确保缓存在多线程环境下的安全性

java如何缓存数据

标签: 缓存数据
分享给朋友:

相关文章

vue实现表格读取数据

vue实现表格读取数据

Vue 实现表格数据读取 在 Vue 中实现表格数据读取通常涉及以下关键步骤: 数据绑定与表格渲染 通过 v-for 指令动态渲染表格行,数据通常存储在组件的 data 或 Vuex 状态中:…

vue怎么实现数据

vue怎么实现数据

Vue 数据实现方式 Vue 提供了多种方式来实现数据的响应式绑定和管理,核心是通过数据驱动视图的更新。 响应式数据声明 在 Vue 组件中,可以通过 data 选项声明响应式数据。这些数据会被…

vue双向实现数据

vue双向实现数据

Vue 双向数据绑定的实现 Vue 的双向数据绑定主要通过 v-model 指令实现,它结合了 v-bind 和 v-on 的功能,能够同步表单输入和应用状态。 基本语法 在表单元素上使用 v-mo…

Vue实现数据检验

Vue实现数据检验

Vue 数据校验的实现方法 在Vue中实现数据校验可以通过多种方式完成,以下是常见的几种方法: 使用Vue的内置指令 Vue提供了一些内置指令如v-model和v-bind可以结合HTML5的表单验…

如何缓存react组件

如何缓存react组件

缓存React组件的方法 React.memo 使用React.memo对函数组件进行浅比较缓存,避免不必要的重新渲染。适用于props不变的场景。 const MemoizedComponen…

vue实现数据添加

vue实现数据添加

在 Vue 中实现数据添加 Vue 提供了多种方式来实现数据的添加操作,可以通过组件的数据绑定、表单处理以及状态管理等方式完成。以下是几种常见的实现方法: 使用 v-model 绑定表单数据 通过…