当前位置:首页 > Java

如何加缓存java

2026-03-25 21:50:38Java

使用Java内置缓存实现

在Java中可以通过java.util.concurrent.ConcurrentHashMap实现简单的内存缓存。创建一个缓存类,包含putgetremove方法。

import java.util.concurrent.ConcurrentHashMap;

public class SimpleCache<K, V> {
    private final ConcurrentHashMap<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库提供了更强大的缓存实现,支持过期策略和缓存大小限制。添加Guava依赖后创建缓存。

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(1000)
        .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);
    }
}

使用Caffeine缓存

Caffeine是高性能Java缓存库,比Guava Cache更快。通过Maven引入依赖后使用。

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

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

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

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

使用Spring Cache注解

在Spring Boot项目中,可以通过注解简化缓存操作。首先启用缓存功能。

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

然后在Service方法上使用缓存注解。

@Service
public class BookService {
    @Cacheable("books")
    public Book getBookByIsbn(String isbn) {
        // 模拟数据库查询
        return findBookInDatabase(isbn);
    }

    @CacheEvict(value = "books", key = "#isbn")
    public void reloadBook(String isbn) {
        // 清除缓存
    }
}

使用Redis分布式缓存

对于分布式系统,可以使用Redis作为缓存。通过Spring Data Redis集成。

@Configuration
@EnableCaching
public class RedisConfig {
    @Bean
    public RedisCacheManager cacheManager(RedisConnectionFactory factory) {
        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofHours(1));
        return RedisCacheManager.builder(factory)
            .cacheDefaults(config)
            .build();
    }
}

在Service中使用方式与Spring Cache相同,只需更换缓存实现为Redis。

缓存注意事项

缓存键设计要确保唯一性,通常使用业务ID组合作为键。对于高频变化数据,设置较短的过期时间。

定期监控缓存命中率,过低可能表明缓存策略需要调整。大对象考虑压缩后存储,减少内存占用。

如何加缓存java

多线程环境下注意缓存一致性问题,必要时使用读写锁或版本控制。分布式缓存需处理网络分区和故障转移场景。

标签: 缓存java
分享给朋友:

相关文章

java如何打开

java如何打开

安装Java开发环境 下载并安装Java Development Kit (JDK),推荐从Oracle官网或OpenJDK获取最新版本。安装完成后配置环境变量,确保JAVA_HOME和PATH变量正…

java如何处理高并发

java如何处理高并发

Java处理高并发的方法 使用多线程和线程池 Java的java.util.concurrent包提供了线程池(如ThreadPoolExecutor)和并发工具类(如CountDownLatch、C…

java如何编写接口

java如何编写接口

编写Java接口的基本语法 在Java中,接口通过interface关键字定义,可以包含抽象方法、默认方法、静态方法和常量。 public interface MyInterface {…

java如何实现多继承

java如何实现多继承

在Java中,由于语言设计本身不支持多继承(即一个类不能直接继承多个父类),但可以通过以下方式间接实现类似多继承的效果: 使用接口实现多继承 接口允许一个类实现多个接口,从而继承多个抽象行为。接口中…

java如何创建测试类

java如何创建测试类

创建测试类的基本步骤 在Java中创建测试类通常使用JUnit框架,以下是具体方法: 安装JUnit依赖 对于Maven项目,在pom.xml中添加依赖: <dependency>…

vue路由实现缓存

vue路由实现缓存

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