以下是关于 Java 使用 Redis 的全面实战教程,涵盖主流客户端、连接方式、常见数据结构操作、配置建议以及最佳实践。
📚 目录
- Java 操作 Redis 的主流客户端
- 推荐:Jedis 与 Lettuce 对比
- Jedis 实战示例
- Lettuce 实战示例
- Spring Boot 集成 Redis
- 常用 Redis 操作(Java 示例)
- 连接池配置建议
- 分布式锁与缓存穿透处理
- 参考资料
1. Java 操作 Redis 的主流客户端
客户端 | 特性 |
---|---|
Jedis | 最经典、同步阻塞 IO、连接池实现 |
Lettuce | 支持异步 / 响应式、基于 Netty |
Redisson | 支持分布式锁、延迟队列、布隆过滤器等高级特性 |
Spring Data Redis | Spring 官方统一封装,底层支持 Lettuce/Jedis |
2. 推荐:Jedis 与 Lettuce 对比
特性 | Jedis | Lettuce |
---|---|---|
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 示例)
类型 | 操作 | 示例 |
---|---|---|
String | set/get | opsForValue().set() |
Hash | put/get | opsForHash().put() |
List | lpush/rpop | opsForList().leftPush() |
Set | sadd/smembers | opsForSet().add() |
Sorted Set | zadd/zrange | opsForZSet().add() |
Key | exists/expire | hasKey() / 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 缓存注解应用示例,或者分布式锁 + 缓存双写一致性策略代码,我可以立即为你定制。是否需要我继续生成代码模板?
发表回复