Redis請求協議的一般形式: 備註:CR表示為\r; LF表示\n 下麵是一個例子: Redis回覆 Redis 命令會返回多種不同類型的回覆。 通過檢查伺服器發回數據的第一個位元組, 可以確定這個回覆是什麼類型: 狀態回覆(status reply)的第一個位元組是 "+" 錯誤回覆(error r ...
Redis請求協議的一般形式:
*<參數數量> CR LF $<參數 1 的位元組數量> CR LF <參數 1 的數據> CR LF ... $<參數 N 的位元組數量> CR LF <參數 N 的數據> CR LF
備註:CR表示為\r; LF表示\n
下麵是一個例子:
*3 $3 SET $5 mykey $7 myvalue
Redis回覆
Redis 命令會返回多種不同類型的回覆。
通過檢查伺服器發回數據的第一個位元組, 可以確定這個回覆是什麼類型:
- 狀態回覆(status reply)的第一個位元組是
"+"
- 錯誤回覆(error reply)的第一個位元組是
"-"
- 整數回覆(integer reply)的第一個位元組是
":"
- 批量回覆(bulk reply)的第一個位元組是
"$"
- 多條批量回覆(multi bulk reply)的第一個位元組是
"*"
實現代碼(C#)
1、 通過Socket 連接 Redis:
// 通過Socket 連接 redis Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); s.Connect("127.0.0.1", 6379);
2、發送指令
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數組
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); // 把結果轉換為string Console.Write(strResult); Console.Write(strResult.Trim() == "+OK" ? "設置成功!": "設置失敗!"); // 判斷設置是否成功
執行效果