自己动手写Redis客户端(C#实现)2 - SET请求和状态回复(set)
2021-04-25 03:26
标签:pre redis ons connect 执行 build 错误 不同 数组 Redis请求协议的一般形式: 备注:CR表示为\r; LF表示\n 下面是一个例子: Redis 命令会返回多种不同类型的回复。 通过检查服务器发回数据的第一个字节, 可以确定这个回复是什么类型: 1、 通过Socket 连接 Redis: 2、发送指令 3、接收回复 自己动手写Redis客户端(C#实现)2 - SET请求和状态回复(set) 标签:pre redis ons connect 执行 build 错误 不同 数组 原文地址:http://www.cnblogs.com/tangruixin/p/7923173.html* CR LF
$1 的字节数量> CR LF
1 的数据> CR LF
...
$ CR LF
CR LF
*3
$3
SET
$5
mykey
$7
myvalue
Redis回复
"+"
"-"
":"
"$"
"*"
实现代码(C#)
// 通过Socket 连接 redis
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Connect("127.0.0.1", 6379);
string key = "SetKeyTest"; // 设置 的key
string value = "设置的值"; // 设置的值
StringBuilder sbSend = new StringBuilder();
sbSend.Append("*3\r\n"); // 参数数量 3
string 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数组
byte[] result = new byte[1024];
int resultLength = s.Receive(result); // 接收回复
// 根据接收到的数据长度重新组装一个结果
byte[] newResult = new byte[resultLength];
for (int i = 0; i )
{
newResult[i] = result[i];
}
string strResult = Encoding.UTF8.GetString(newResult); // 把结果转换为string
Console.Write(strResult);
Console.Write(strResult.Trim() == "+OK" ? "设置成功!": "设置失败!"); // 判断设置是否成功
执行效果
文章标题:自己动手写Redis客户端(C#实现)2 - SET请求和状态回复(set)
文章链接:http://soscw.com/index.php/essay/79226.html