Java的Redis客户端:Jedis、Lettuce和Redisson——概述与示例

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

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

开始课程

Java的Redis客户端:Jedis、Lettuce和Redisson——详细指南



Redis是一种高性能的键值对数据存储系统,运行在内存中。为了从Java应用程序与Redis交互,存在多个成熟的库。在本文中,我们将介绍三种最流行的Java Redis客户端:Jedis、Lettuce和Redisson。您将了解它们的特点、优势,并获得快速上手的现成代码示例。



1. Jedis——简单轻量的客户端



Jedis是一个极简、非线程安全的客户端,非常适合简单项目和单体应用。它通过简单的API提供对Redis命令的直接访问。Jedis不原生支持异步调用,但以其易用性弥补了这一不足。



添加依赖(Maven)

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


示例:连接与基本操作

import redis.clients.jedis.Jedis;

public class JedisExample { public static void main(String[] args) { // 连接到Redis(默认localhost:6379) try (Jedis jedis = new Jedis("localhost", 6379)) { // 身份验证(如果设置了密码) // jedis.auth("password");

// 设置值 jedis.set("user:100", "Alice"); // 获取值 String user = jedis.get("user:100"); System.out.println("User: " + user); // User: Alice

// 操作哈希 jedis.hset("user:200", "name", "Bob"); jedis.hset("user:200", "age", "30"); String name = jedis.hget("user:200", "name"); System.out.println("Name: " + name); // Name: Bob

// 设置TTL(键的生存时间) jedis.expire("user:100", 60); // 键存活60秒 } }}


Jedis的优缺点

  • 优点:入门门槛低、轻量、全面支持Redis命令。
  • 缺点:非线程安全(需要连接池)、无异步API、无内置分布式数据结构支持。


2. Lettuce——异步与响应式客户端



Lettuce是一个基于Netty构建的现代、线程安全的Redis客户端。它支持同步、异步和响应式(Reactive Streams)编程。Lettuce非常适合Java 8+的高负载和异步应用。



添加依赖(Maven)

<dependency>    <groupId>io.lettuce</groupId>    <artifactId>lettuce-core</artifactId>    <version>6.3.1.RELEASE</version></dependency>


示例:异步连接

import io.lettuce.core.RedisClient;import io.lettuce.core.api.StatefulRedisConnection;import io.lettuce.core.api.async.RedisAsyncCommands;

import java.util.concurrent.CompletableFuture;

public class LettuceAsyncExample { public static void main(String[] args) { // 创建客户端 RedisClient redisClient = RedisClient.create("redis://localhost:6379"); // 打开连接 try (StatefulRedisConnection<String, String> connection = redisClient.connect()) { RedisAsyncCommands<String, String> async = connection.async(); // 异步设置值 CompletableFuture<String> setFuture = async.set("key:1", "Hello from Lettuce!").toCompletableFuture(); // 异步获取值

推荐