本文目录导读:

在Java中操作Redis数据,最常用的客户端库是 Jedis(同步)和 Lettuce(支持响应式,Spring Boot默认),下面通过一个完整案例演示如何使用 Jedis 来操作Redis。
环境准备
1 添加 Maven 依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>5.0.2</version>
</dependency>
2 启动 Redis 服务
确保本地Redis已启动(默认端口6379,无密码)。
基础操作案例
1 连接Redis并操作String类型
import redis.clients.jedis.Jedis;
public class RedisStringExample {
public static void main(String[] args) {
// 1. 连接Redis
Jedis jedis = new Jedis("localhost", 6379);
System.out.println("连接成功");
// 2. 操作String类型
jedis.set("name", "张三");
String name = jedis.get("name");
System.out.println("获取name: " + name); // 输出:张三
// 3. 设置过期时间(5秒后自动删除)
jedis.setex("code", 5, "123456");
System.out.println("code: " + jedis.get("code")); // 5秒内可获取
// 4. 自增操作(常用于计数器)
jedis.incr("counter");
jedis.incrBy("counter", 5);
System.out.println("counter: " + jedis.get("counter")); // 输出:6
// 5. 关闭连接
jedis.close();
}
}
2 操作Hash类型(适合存储对象)
Jedis jedis = new Jedis("localhost", 6379);
// 存储用户信息(Hash)
jedis.hset("user:1001", "name", "李四");
jedis.hset("user:1001", "age", "25");
jedis.hset("user:1001", "city", "北京");
// 获取单个字段
String userName = jedis.hget("user:1001", "name");
System.out.println("用户名: " + userName);
// 获取所有字段
Map<String, String> userMap = jedis.hgetAll("user:1001");
userMap.forEach((key, value) ->
System.out.println(key + " -> " + value));
jedis.close();
3 操作List类型(消息队列/排行榜)
Jedis jedis = new Jedis("localhost", 6379);
// 从右侧插入(类似队列)
jedis.rpush("messages", "msg1", "msg2", "msg3");
// 从左侧弹出(FIFO)
String msg = jedis.lpop("messages");
System.out.println("弹出消息: " + msg); // msg1
// 获取列表所有元素
List<String> allMsg = jedis.lrange("messages", 0, -1);
System.out.println("剩余消息: " + allMsg); // [msg2, msg3]
jedis.close();
4 操作Set类型(去重、交集等)
Jedis jedis = new Jedis("localhost", 6379);
// 添加元素
jedis.sadd("hobby:zhangsan", "篮球", "足球", "编程");
jedis.sadd("hobby:lisi", "篮球", "游泳", "编程");
// 获取张三的兴趣
Set<String> hobbies = jedis.smembers("hobby:zhangsan");
System.out.println("张三的兴趣: " + hobbies);
// 获取共同兴趣(交集)
Set<String> intersect = jedis.sinter("hobby:zhangsan", "hobby:lisi");
System.out.println("共同兴趣: " + intersect); // [篮球, 编程]
jedis.close();
5 操作ZSet类型(带权重的有序集合)
Jedis jedis = new Jedis("localhost", 6379);
// 添加学生成绩(分数作为权重)
jedis.zadd("scores", 95.0, "张三");
jedis.zadd("scores", 88.5, "李四");
jedis.zadd("scores", 72.0, "王五");
// 按分数从高到低获取前两名
Set<String> top2 = jedis.zrevrange("scores", 0, 1);
System.out.println("前两名: " + top2); // [张三, 李四]
// 获取李四的排名(从0开始,0为最高分)
Long rank = jedis.zrevrank("scores", "李四");
System.out.println("李四排名: " + (rank + 1)); // 第2名
jedis.close();
使用连接池提高性能
实际生产环境不要每次新建连接,应使用连接池:
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisPoolExample {
private static JedisPool pool;
static {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(50); // 最大连接数
config.setMaxIdle(10); // 最大空闲连接
config.setMinIdle(5); // 最小空闲连接
config.setTestOnBorrow(true); // 获取连接时测试有效性
pool = new JedisPool(config, "localhost", 6379);
}
public static void main(String[] args) {
try (Jedis jedis = pool.getResource()) {
jedis.set("pool_test", "连接池示例");
System.out.println(jedis.get("pool_test"));
} // 自动归还连接到池中
// 应用关闭时销毁连接池
pool.close();
}
}
常见Redis数据结构与Java操作总结
| Redis类型 | 常用操作 | Java对应方法 | 典型场景 |
|---|---|---|---|
| String | set/get | set(), get(), incr() |
缓存、计数器 |
| Hash | hset/hget | hset(), hgetAll() |
存储对象字段 |
| List | lpush/rpop | lpush(), rpop(), lrange() |
消息队列、任务队列 |
| Set | sadd/smembers | sadd(), smembers(), sinter() |
标签系统、去重 |
| ZSet | zadd/zrange | zadd(), zrevrange(), zrevrank() |
排行榜、优先级队列 |
使用 Spring Boot 集成(推荐方式)
实际项目推荐使用 Spring Data Redis(基于 Lettuce):
application.yml 配置:
spring:
data:
redis:
host: localhost
port: 6379
操作代码(使用RedisTemplate):
@Service
public class RedisService {
@Autowired
private StringRedisTemplate redisTemplate; // 默认处理字符串
public void setValue(String key, String value) {
redisTemplate.opsForValue().set(key, value, 10, TimeUnit.MINUTES);
}
public String getValue(String key) {
return redisTemplate.opsForValue().get(key);
}
public void addToSet(String key, String... values) {
redisTemplate.opsForSet().add(key, values);
}
}
常见问题
- 连接超时:检查Redis是否启动,防火墙是否开放6379端口
- 密码认证:如Redis有密码,在
jedis.auth("password")或在连接池配置密码 - 序列化问题:使用Spring RedisTemplate时注意对象序列化,推荐使用JSON序列化
这个案例覆盖了Redis最常用的5种数据类型的Java操作,可以直接复制代码运行测试。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播