使用socket封装java一个支持集群可执行读写redis命令并获取返回值的工具类
时间: 2024-01-21 08:17:53 浏览: 87
jedis单机版,集群版工具类
首先,需要导入Jedis和Socket相关的包:
```java
import redis.clients.jedis.Jedis;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
```
然后,创建一个RedisSocket类,其中包括连接Redis的方法和执行Redis命令的方法:
```java
public class RedisSocket {
private String host; // Redis主机名
private int port; // Redis端口号
public RedisSocket(String host, int port) {
this.host = host;
this.port = port;
}
/**
* 连接Redis
*/
public Jedis connect() {
return new Jedis(host, port);
}
/**
* 执行Redis命令
*
* @param command Redis命令
* @return 执行结果
*/
public String execute(String command) {
Socket socket = null;
BufferedReader in = null;
PrintWriter out = null;
try {
// 创建Socket连接
socket = new Socket(host, port);
// 创建输入输出流
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
// 发送Redis命令
out.println(command);
// 读取Redis返回值
String result = in.readLine();
// 返回结果
return result;
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
try {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
if (socket != null) {
socket.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
```
这个RedisSocket类支持连接单个Redis实例,也支持通过Socket连接Redis集群。可以通过connect方法获取一个Jedis对象,然后使用Jedis对象执行Redis命令;也可以使用execute方法直接执行Redis命令并获取返回值。
示例:
```java
public class TestRedisSocket {
public static void main(String[] args) {
// 连接单个Redis实例
RedisSocket redisSocket = new RedisSocket("localhost", 6379);
Jedis jedis = redisSocket.connect();
jedis.set("key", "value");
String result = jedis.get("key");
System.out.println(result);
// 连接Redis集群
RedisSocket redisSocketCluster = new RedisSocket("localhost", 7000);
String resultCluster = redisSocketCluster.execute("set key value");
System.out.println(resultCluster);
}
}
```
这个例子中,首先连接了单个Redis实例,然后使用Jedis对象执行Redis命令,并获取返回值;然后连接了Redis集群,使用execute方法执行Redis命令,并获取返回值。
阅读全文