java Redis 操作工具类封装(备忘)
在 Java 中,封装 Redis 的常见操作是提升开发效率和代码可维护性的好方法。使用 Redis 可以帮助你的应用在缓存、消息队列、会话存储等方面显著提高性能。以下是一个基于 Jedis
客户端的 Redis 操作工具类封装示例。
1. 添加 Redis 依赖
首先,确保在 Maven 项目中加入 Jedis 依赖:
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.6.0</version> <!-- 请根据实际需求修改版本号 -->
</dependency>
2. Redis 操作工具类封装
以下是一个基于 Jedis 客户端的 Redis 操作工具类。它封装了 Redis 的基本操作,如设置、获取、删除、判断键是否存在等常见功能。
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
public class RedisUtil {
private static JedisPool jedisPool;
// 静态初始化:创建 Jedis 连接池
static {
// 配置连接池
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(128); // 最大连接数
poolConfig.setMaxIdle(64); // 最大空闲连接数
poolConfig.setMinIdle(16); // 最小空闲连接数
poolConfig.setTestOnBorrow(true); // 在获取连接时检查有效性
// 创建连接池,连接到 Redis 服务
jedisPool = new JedisPool(poolConfig, "localhost", 6379); // 根据需要修改主机和端口
}
// 获取 Jedis 实例
private static Jedis getJedis() {
return jedisPool.getResource();
}
// 释放 Jedis 实例
private static void returnResource(Jedis jedis) {
if (jedis != null) {
jedis.close();
}
}
// 设置键值对
public static void set(String key, String value) {
Jedis jedis = null;
try {
jedis = getJedis();
jedis.set(key, value);
} catch (Exception e) {
System.err.println("Error setting value: " + e.getMessage());
} finally {
returnResource(jedis);
}
}
// 获取键值对
public static String get(String key) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.get(key);
} catch (Exception e) {
System.err.println("Error getting value: " + e.getMessage());
return null;
} finally {
returnResource(jedis);
}
}
// 删除键
public static void del(String key) {
Jedis jedis = null;
try {
jedis = getJedis();
jedis.del(key);
} catch (Exception e) {
System.err.println("Error deleting key: " + e.getMessage());
} finally {
returnResource(jedis);
}
}
// 判断键是否存在
public static boolean exists(String key) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.exists(key);
} catch (Exception e) {
System.err.println("Error checking key existence: " + e.getMessage());
return false;
} finally {
returnResource(jedis);
}
}
// 设置带过期时间的键值对
public static void setEx(String key, String value, int seconds) {
Jedis jedis = null;
try {
jedis = getJedis();
jedis.setex(key, seconds, value);
} catch (Exception e) {
System.err.println("Error setting value with expiration: " + e.getMessage());
} finally {
returnResource(jedis);
}
}
// 获取键的过期时间
public static long ttl(String key) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.ttl(key);
} catch (Exception e) {
System.err.println("Error getting TTL: " + e.getMessage());
return -1;
} finally {
returnResource(jedis);
}
}
// 设置列表
public static void lpush(String listKey, String value) {
Jedis jedis = null;
try {
jedis = getJedis();
jedis.lpush(listKey, value);
} catch (Exception e) {
System.err.println("Error pushing value to list: " + e.getMessage());
} finally {
returnResource(jedis);
}
}
// 获取列表
public static String rpop(String listKey) {
Jedis jedis = null;
try {
jedis = getJedis();
return jedis.rpop(listKey);
} catch (Exception e) {
System.err.println("Error popping value from list: " + e.getMessage());
return null;
} finally {
returnResource(jedis);
}
}
public static void main(String[] args) {
// 设置键值对
set("name", "John Doe");
// 获取键值对
String name = get("name");
System.out.println("Name: " + name);
// 设置带过期时间的键值对
setEx("tempKey", "temporary data", 10);
// 获取键的过期时间
long ttl = ttl("tempKey");
System.out.println("TTL of tempKey: " + ttl + " seconds");
// 列表操作
lpush("myList", "item1");
lpush("myList", "item2");
// 弹出列表项
String item = rpop("myList");
System.out.println("Popped from list: " + item);
// 删除键
del("name");
// 检查键是否存在
boolean exists = exists("name");
System.out.println("Does 'name' exist? " + exists);
}
}
3. 功能说明
1. 连接池初始化
- 使用
JedisPool
创建一个 Redis 连接池,优化 Redis 的连接管理,避免每次请求都新建连接,提高性能。
2. 获取和释放 Jedis 实例
getJedis()
获取 Redis 连接。returnResource(Jedis jedis)
用于释放 Jedis 连接,避免连接泄漏。
3. 基本操作
-
设置键值对:
public static void set(String key, String value)
这个方法将键值对存储到 Redis 中。
-
获取键值对:
public static String get(String key)
获取 Redis 中指定键的值。
-
删除键:
public static void del(String key)
删除指定键。
-
判断键是否存在:
public static boolean exists(String key)
判断 Redis 中是否存在某个键。
-
设置带过期时间的键值对:
public static void setEx(String key, String value, int seconds)
存储一个带过期时间的键值对。
-
获取键的过期时间:
public static long ttl(String key)
获取某个键的剩余过期时间(单位秒)。
4. 列表操作
-
添加元素到列表左侧:
public static void lpush(String listKey, String value)
向 Redis 列表的左侧推送元素。
-
从列表右侧弹出元素:
public static String rpop(String listKey)
从 Redis 列表的右侧弹出一个元素。
4. 改进与扩展
- 错误处理:可以进一步增强错误处理和异常捕获,例如,捕获连接失败、操作失败等异常,提供详细的错误信息。
- Redis 集群支持:如果你使用的是 Redis 集群,可以使用
JedisCluster
代替Jedis
,并对工具类进行适当的修改。
5. 如何使用该工具类
- 你只需要通过调用这些方法(如
set()
,get()
,del()
等),就能快速完成 Redis 操作,而不需要手动管理连接、异常处理等繁琐工作。