以下是关于 Java 使用 Redis 的全面实战教程,涵盖主流客户端、连接方式、常见数据结构操作、配置建议以及最佳实践。


📚 目录

  1. Java 操作 Redis 的主流客户端
  2. 推荐:Jedis 与 Lettuce 对比
  3. Jedis 实战示例
  4. Lettuce 实战示例
  5. Spring Boot 集成 Redis
  6. 常用 Redis 操作(Java 示例)
  7. 连接池配置建议
  8. 分布式锁与缓存穿透处理
  9. 参考资料

1. Java 操作 Redis 的主流客户端

客户端特性
Jedis最经典、同步阻塞 IO、连接池实现
Lettuce支持异步 / 响应式、基于 Netty
Redisson支持分布式锁、延迟队列、布隆过滤器等高级特性
Spring Data RedisSpring 官方统一封装,底层支持 Lettuce/Jedis

2. 推荐:Jedis 与 Lettuce 对比

特性JedisLettuce
IO 模型阻塞非阻塞 Netty
线程安全否(需连接池)是(单实例线程安全)
性能中等
推荐使用小项目或传统项目高并发 / Spring Boot 默认

3. Jedis 实战示例

Maven 依赖

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

基本操作

import redis.clients.jedis.Jedis;

public class RedisDemo {
    public static void main(String[] args) {
        Jedis jedis = new Jedis("localhost", 6379);
        jedis.set("name", "Tom");
        String value = jedis.get("name");
        System.out.println("name = " + value);
        jedis.close();
    }
}


4. Lettuce 实战示例

Maven 依赖

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

基本操作

import io.lettuce.core.RedisClient;
import io.lettuce.core.api.sync.RedisCommands;
import io.lettuce.core.api.StatefulRedisConnection;

public class LettuceDemo {
    public static void main(String[] args) {
        RedisClient client = RedisClient.create("redis://localhost:6379");
        StatefulRedisConnection<String, String> connection = client.connect();
        RedisCommands<String, String> commands = connection.sync();

        commands.set("city", "Beijing");
        System.out.println("city = " + commands.get("city"));

        connection.close();
        client.shutdown();
    }
}


5. Spring Boot 集成 Redis

Maven 依赖(默认用 Lettuce)

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

application.yml 配置

spring:
  redis:
    host: localhost
    port: 6379
    timeout: 3000
    lettuce:
      pool:
        max-active: 10
        max-idle: 5
        min-idle: 1

使用示例

@Autowired
private StringRedisTemplate redisTemplate;

public void testRedis() {
    redisTemplate.opsForValue().set("hello", "world");
    String val = redisTemplate.opsForValue().get("hello");
    System.out.println(val);
}


6. 常用 Redis 操作(Java 示例)

类型操作示例
Stringset/getopsForValue().set()
Hashput/getopsForHash().put()
Listlpush/rpopopsForList().leftPush()
Setsadd/smembersopsForSet().add()
Sorted Setzadd/zrangeopsForZSet().add()
Keyexists/expirehasKey() / expire()

7. 连接池配置建议

使用 Jedis 时必须手动配置连接池(推荐 HikariCP / JedisPool)

示例:

JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost", 6379);
try (Jedis jedis = pool.getResource()) {
    jedis.set("key", "value");
}

参数建议:

maxTotal: 50
maxIdle: 10
minIdle: 2
testOnBorrow: true


8. 分布式锁与缓存穿透处理

使用 Redisson 实现分布式锁

<dependency>
  <groupId>org.redisson</groupId>
  <artifactId>redisson-spring-boot-starter</artifactId>
  <version>3.23.4</version>
</dependency>

@Autowired
private RedissonClient redissonClient;

RLock lock = redissonClient.getLock("myLock");
lock.lock(10, TimeUnit.SECONDS); // 自动释放
try {
    // 业务逻辑
} finally {
    lock.unlock();
}

缓存穿透(布隆过滤器)

Redisson 提供内建布隆过滤器:

RBloomFilter<String> bloomFilter = redissonClient.getBloomFilter("bloom");
bloomFilter.tryInit(10000L, 0.03);
bloomFilter.add("user_123");


9. 参考资料


如果你希望我帮你生成一个完整的 Spring Boot + Redis 缓存注解应用示例,或者分布式锁 + 缓存双写一致性策略代码,我可以立即为你定制。是否需要我继续生成代码模板?