自己动手写Redis客户端(C#实现)2

来源:转载

Redis请求协议的一般形式:

*<参数数量> CR LF$<参数 1 的字节数量> CR LF<参数 1 的数据> CR LF...$<参数 N 的字节数量> CR LF<参数 N 的数据> CR LF

备注:CR表示为/r; LF表示/n

下面是一个例子:

*3$3SET$5mykey$7myvalue

Redis回复

Redis 命令会返回多种不同类型的回复。

通过检查服务器发回数据的第一个字节, 可以确定这个回复是什么类型:

  • 状态回复(status reply)的第一个字节是 "+"
  • 错误回复(error reply)的第一个字节是 "-"
  • 整数回复(integer reply)的第一个字节是 ":"
  • 批量回复(bulk reply)的第一个字节是 "$"
  • 多条批量回复(multi bulk reply)的第一个字节是 "*"

实现代码(C#)

1、 通过Socket 连接 Redis:

// 通过Socket 连接 redisSocket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Connect("127.0.0.1", 6379);

2、发送指令

string key = "SetKeyTest"; // 设置 的keystring value = "设置的值"; // 设置的值StringBuilder sbSend = new StringBuilder();sbSend.Append("*3/r/n"); // 参数数量 3string cmd = "SET";sbSend.Append("$" + Encoding.UTF8.GetBytes(cmd).Length + "/r/n"); // 参数1的长度sbSend.Append(cmd + "/r/n");// 参数1( SET指令 )sbSend.Append("$" + Encoding.UTF8.GetBytes(key).Length + "/r/n"); // 参数2的长度sbSend.Append("" + key + "/r/n");// 参数2(Set 的 Value)sbSend.Append("$" + Encoding.UTF8.GetBytes(value).Length + "/r/n"); // 参数3的长度sbSend.Append("" + value + "/r/n");// 参数3(Set 的 Value)Console.WriteLine("发送的命令:");Console.Write(sbSend.ToString());byte[] data = Encoding.UTF8.GetBytes(sbSend.ToString()); // 把请求转换为byte数组

3、接收回复

byte[] result = new byte[1024];int resultLength = s.Receive(result); // 接收回复// 根据接收到的数据长度重新组装一个结果byte[] newResult = new byte[resultLength];for (int i = 0; i < resultLength; i++){newResult[i] = result[i];}string strResult = Encoding.UTF8.GetString(newResult); // 把结果转换为stringConsole.Write(strResult);Console.Write(strResult.Trim() == "+OK" ? "设置成功!": "设置失败!"); // 判断设置是否成功

执行效果

分享给朋友:
您可能感兴趣的文章:
随机阅读: