Java中的缓存:Redis、Caffeine及其他工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java中的缓存:Redis及其他解决方案

缓存是Java应用程序中优化性能的关键技术之一。它可以减少响应时间,降低数据库和外部API的负载。在本文中,我们将介绍流行的缓存工具:Redis、Caffeine、Ehcache以及Spring Cache的内置功能。



为什么Java需要缓存?

没有缓存,每次数据访问都可能引发昂贵的操作:SQL查询、REST API调用或复杂计算。缓存将这些操作的结果存储在快速访问区域(内存或分布式存储)中,从而带来以下好处:

  • 减少响应时间(延迟)
  • 降低后端负载
  • 节省服务器资源
  • 在高负载下实现可扩展性


1. Redis — 分布式缓存

Redis 是一种内存数据存储,通常用作分布式缓存。它支持复杂的数据结构:字符串、列表、集合、哈希和有序集合。Java有流行的客户端 Jedis 和更现代的 Lettuce。



通过Jedis连接Redis

在 pom.xml 中添加依赖:

<dependency>    <groupId>redis.clients</groupId>    <artifactId>jedis</artifactId>    <version>5.0.2</version></dependency>


使用Redis缓存的示例:

import redis.clients.jedis.Jedis;

public class RedisCacheExample { public static void main(String[] args) { try (Jedis jedis = new Jedis("localhost", 6379)) { // 使用TTL(生存时间)保存数据 jedis.setex("user:123", 3600, "{\\"name\\":\\"伊万\\",\\"age\\":30}");

// 从缓存中读取 String cachedUser = jedis.get("user:123"); System.out.println("来自缓存: " + cachedUser);

// 检查键是否存在 if (jedis.exists("user:123")) { System.out.println("键存在"); } } }}


Redis的优点:分布式、持久化、支持TTL、发布/订阅、集群。 缺点:需要单独的服务器、对象序列化。



2. Caffeine — 高性能本地缓存

Caffeine 是一个用于Java内存缓存的现代库。它基于W-TinyLFU算法,在低内存消耗下提供高效率。Caffeine通常用作Spring Boot 2.x和3.x中的默认缓存。



Caffeine示例

import com.github.benmanes.caffeine.cache.Cache;import com.github.benmanes.caffeine.cache.Caffeine;import java.util.concurrent.TimeUnit;

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

// 写入 cache.put("product:42", "戴尔XPS 15笔记本电脑");

// 带回退的读取 String product = cache.get("product:42", key -> loadFromDB(key)); System.out.println("商品: " + product);

// 统计信息 System.out.println("命中次数: " + cache.stats().hitCount()); }

private static String loadFromDB(String key) { // 模拟从数据库加载 return "键为 " + key + " 的商品"; }}


Caffeine的优点:高速、自动驱逐、统计信息、与Spring集成。 缺点:仅限本地(非分布式)。



3. Ehcache — 成熟的本地缓存

Ehcache

推荐