首先要了解Redis的交互协议。
摘抄:
- 简单字符串(Simple Strings): 以 “+” 开头,例如 “+OK\r\n” 表示一个成功的响应。
- 错误(Errors): 以 “-” 开头,例如 “-ERR unknown command\r\n” 表示一个错误响应。
- 整数(Integers): 以 “:” 开头,例如 “:1000\r\n” 表示整数1000。
- 批量字符串(Bulk Strings): 以 “$” 开头,例如 “$6\r\nfoobar\r\n” 表示一个长度为6的字符串 “foobar”。
- 数组(Arrays): 以 “*” 开头,例如 “*3\r\n:1\r\n:2\r\n:3\r\n” 表示包含3个整数的数组 [1, 2, 3]。
最好设置Redis是无密码允许访问。
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;
/**
* @ Annotation:模拟Redis服务器 port=6379
*/
public class RedisHost {
/**
* 1.客户端连接命令:COMMAND
* 2.RedisHost response "OK"
* 3.客户端发送命令
* 4.RedisHost response "OK"(如果是"set"命令)
* 5.客户端发送命令
* 6.RedisHost response "value"(如果是"get")命令
* @param args
*/
public static void main(String[] args) {
try {
byte[] bytes = new byte[1024];
ServerSocket server = new ServerSocket();
InetSocketAddress address = new InetSocketAddress("127.0.0.1", 6379);
server.bind(address);
Socket accept = server.accept();
InputStream is = accept.getInputStream();//客户端带宽
//客户端连接
int clientCon = is.read(bytes);
System.out.println("客户端连接:"+new String(bytes,0,clientCon));
OutputStream os = accept.getOutputStream();//Redis服务器带宽
//Redis回应OK
String hostRespCon="+OK\r\n";
os.write(hostRespCon.getBytes());
os.flush();
System.out.println("客户端与Redis服务器连接成功,Redis服务器响应了:"+hostRespCon);
System.out.println("客户端可以继续输入内容");
//等待客户端输入。。。。
//读取客户端的第一次输入
int clientSet = is.read(bytes);
String clientStr = new String(bytes, 0, clientSet);
System.out.println("客户端第一次输入了:"+clientStr);
//Redis对客户端的输入响应+OK
String hostRespSet="+OK\r\n";
os.write(hostRespSet.getBytes());
os.flush();
System.out.println("客户端输入成功,Redis服务器响应了:"+hostRespSet);
//客户端再次输入
System.out.println("客户端可以继续输入内容");
int clientGet = is.read(bytes);
String clientGetStr = new String(bytes, 0, clientGet);
System.out.println("客户端又输入了:"+clientGetStr);
//组装语句
String substring = clientStr.substring(22,33);
//Redis响应
if (clientGetStr.contains("get")){
String resp=substring;
os.write(resp.getBytes());
System.out.println("服务器响应了:"+substring);
}
//释放资源
os.flush();
is.close();
os.close();
accept.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//截取最后一个字符
public String getLastStr(String input){
return null;
}
}