Java 缓存:Redis、Ehcache、Caffeine、Hazelcast — 概述与示例

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

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

开始课程

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



缓存是优化 Java 应用程序性能的关键技术之一。它可以减少响应时间、降低数据库负载并节省基础设施成本。本文将详细介绍 Java 中流行的缓存库和工具:Redis、Ehcache、Caffeine 和 Hazelcast。您将了解何时以及如何选择这些工具,并看到实际可用的代码示例。



为什么需要缓存?

没有缓存,每次数据请求都会从慢速存储(数据库、外部 API)中读取。缓存将频繁请求的数据存储在快速内存中(进程内或内存中),从而带来以下好处:

  • 访问速度提升 10–100 倍
  • 降低数据库负载
  • 提高系统吞吐量
  • 节省资源


1. Redis — 分布式缓存

Redis 是一个内存数据存储,作为独立服务器运行。它支持复杂的数据结构(字符串、列表、集合、哈希)以及键过期机制(TTL)。在 Java 中,可以使用 Jedis 或 Lettuce 客户端。



使用 Jedis 操作 Redis 的示例

import redis.clients.jedis.Jedis;

public class RedisCacheExample { public static void main(String[] args) { try (Jedis jedis = new Jedis("localhost", 6379)) { // 设置一个带有 60 秒 TTL 的值 jedis.setex("user:123", 60, "{\\"name\\":\\"Alice\\",\\"role\\":\\"admin\\"}");

// 读取值 String userData = jedis.get("user:123"); System.out.println("缓存数据: " + userData);

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


Redis 优点:

  • 支持集群和复制
  • 持久化(RDB、AOF)
  • 丰富的命令集(INCR、SORT、PUB/SUB)
  • 通过 spring-boot-starter-data-redis 与 Spring Boot 完美集成


缺点:

  • 网络延迟(独立进程)
  • 需要运维管理
  • 不适合数据量极小的缓存(连接开销)


2. Ehcache — 成熟的进程内缓存

Ehcache 是 Java 最古老的缓存库之一。它在 JVM 内部运行,支持磁盘存储(BigMemory)并与 JCache(JSR-107)完全兼容。非常适合单体应用。



通过 XML 配置 Ehcache 的示例

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmlns="http://www.ehcache.org/v3"        xsi:schemaLocation="http://www.ehcache.org/v3 http://www.ehcache.org/schema/ehcache-core-3.10.xsd">    <cache alias="users">        <key-type>java.lang.String</key-type>        <value-type>java.lang.String</value-type>        <heap>1000</heap>        <expiry>            <ttl unit="seconds">300</ttl>        </expiry>    </cache></config>


在代码中使用 Ehcache 的示例

import org.ehcache.Cache;import org.ehcache.CacheManager;import org.ehcache.config.builders.CacheManagerBuilder;import org.ehcache.xml.XmlConfiguration;

public class EhcacheExample { public static void main(String[] args) { XmlConfiguration xmlConfig = new XmlConfiguration( EhcacheExample.class.getResource("/ehcache.xml")); try (CacheManager cacheManager = CacheManagerBuilder.newCacheManager(xmlConfig)) { cacheManager.init(); Cache<String, String> users = cacheManager.getCache("u

推荐