自己动手写Redis客户端(C#实现)2 - SET请求和状态回复(set)
2024-10-17 22:39:36
Redis请求协议的一般形式:
*<参数数量> CR LF
$<参数 的字节数量> CR LF
<参数 的数据> CR LF
...
$<参数 N 的字节数量> CR LF
<参数 N 的数据> CR LF
备注:CR表示为\r; LF表示\n
下面是一个例子:
*
$
SET
$
mykey
$
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", );
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[];
int resultLength = s.Receive(result); // 接收回复 // 根据接收到的数据长度重新组装一个结果
byte[] newResult = new byte[resultLength];
for (int i = ; i < resultLength; i++)
{
newResult[i] = result[i];
}
string strResult = Encoding.UTF8.GetString(newResult); // 把结果转换为string
Console.Write(strResult);
Console.Write(strResult.Trim() == "+OK" ? "设置成功!": "设置失败!"); // 判断设置是否成功
执行效果
最新文章
- 2015微软MVP全球峰会见闻
- mybatis动态切换数据源
- 基于Oracle的SQL优化(社区万众期待 数据库优化扛鼎巨著)
- InfoSphere BigInsights 安装部署
- 99%Bug 修复方法
- HTTP 代理原理及实现
- 常用监控SQL
- win7下安装sdks
- applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.
- MSSQL TABLE COPY TABLE
- Oracle SQL——inner jion;left join;right join的区别和使用场景
- 命令行启用IIS Express
- Python之路----各类推导式
- python,遍历文件的方法
- [翻译] GoogleMaterialDesignIcons
- C#字符串二进制互换
- PHP 查找二维数组中是否有指定字符串的字段
- Android.mk编译的写法
- pdf 转图片,提取图片研究心得
- php post
热门文章
- 查看macOS下正在使用的zsh
- 【Linux】配置SSH Key到GitHub/GitLab
- 2019年6月pmp考试马上开始!报考9月怎么进行中文报名?
- GWAS:拒绝假阳性之case和control数量比例严重失衡的解决方案(SAIGE模型的应用)
- django 2.接口之工作原理
- Java设计模式--装饰器模式到Java IO 流
- 【linux】常用命令集锦&;持续更新...
- hadoop记录-hive常见设置
- 策略模式-Strategy(Java实现)
- 【游戏开发】基于VS2017的OpenGL开发环境搭建