当前位置:首页 > 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中,创建线程主要有两种方式:继承Thread类和实现Runnable接口。以下是具体实现方法: 继承Thread类 通过继承Thread类并重写run()方法可以创建线程。…

java如何编程

java如何编程

Java编程基础 Java是一种面向对象的编程语言,广泛应用于企业级开发、移动应用(Android)等领域。以下是Java编程的核心步骤和示例。 环境搭建 安装JDK 从Oracle官网下载适合…

java如何调用接口

java如何调用接口

调用接口的基本方法 在Java中调用接口通常涉及实现接口或使用接口引用对象。以下是几种常见场景的示例: 定义接口 public interface MyInterface { void d…

如何自学java

如何自学java

选择合适的学习资源 从官方文档开始,Oracle提供的Java官方教程(Java Tutorials)是权威且免费的学习资料。在线平台如Codecademy、Coursera或Udemy提供互动式课程…

java版本如何查看

java版本如何查看

查看Java版本的命令行方法 在命令行或终端中运行以下命令可以查看当前安装的Java版本: java -version 输出示例: java version "1.8.0_301" Java(TM…

java程序如何打包

java程序如何打包

打包Java程序的方法 使用JAR打包 Java程序可以通过JAR(Java Archive)格式打包,这是一种常见的压缩格式,适用于包含多个类文件和资源的项目。以下是使用JAR打包的步骤: 确保项…