Redis协议详解
Redis协议详解
由于前段时间在使用ServiceStack.Redis感觉不怎么方便和其代码实现也不理想所以就产生编写一个Redis .Net Client的想法(毕竟自己动手丰衣足食啊).实现的目的就是可以更简单了操作Redis并提供更多的数据处理方式如:String,json和Protobuf等。在操作Redis其实是通过TCP等方式来处理,所以它和其他网络服务一样有一个交互协议;Redis的交互协议比较怪异,第一次看感觉制定这协议很不合理……不过理解下来协议总体来说还是比较简单。
Redis的通讯协议可以说大集汇了……消息头标识,消息行还有就行里可能还有个数据块大小描述.首先Redis是以行来划分,每行以\r\n行结束。每一行都有一个消息头,消息头共分为5种分别如下:
(+) 表示一个正确的状态信息,具体信息是当前行+后面的字符。
(-) 表示一个错误信息,具体信息是当前行-后面的字符。
(*) 表示消息体总共有多少行,不包括当前行,*后面是具体的行数。
($) 表示下一行数据长度,不包括换行符长度\r\n,$后面则是对应的长度的数据。
(:) 表示返回一个数值,:后面是相应的数字节符。
以上就是Redis协议的基础组成部分,下面来分析几个指令了解一下具体相关指令和返回情况.
SET
C:
|
1
|
SET HENRY HENRYFAN |
以上命令是设置HENRY 的值为HENRYFAN.在Redis的通讯协议上会以空格把命令拆分成三行;得到最终的命令如下:
|
1
2
3
4
5
6
7
|
*3\r\n$3\r\nSET\r\n$5\r\nHENRY\r\n$8\r\nHENRYFAN\r\n |
S:
服务端操作成功
|
1
|
+OK\r\n |
如果出现错误服务端会返回
|
1
|
-错误信息\r\n |
GET
C:
|
1
|
GET HENRY |
产生的通讯指令是:
|
1
2
3
4
5
|
*2\r\n$3\r\nGET\r\n$5\r\nHENRY\r\n |
S:
如果存在这个Key则返回
|
1
2
|
$8\r\nHENRYFAN\r\n |
不存在返回
|
1
|
$-1\r\n |
HKEYS
C:
|
1
|
HKEYS HENRY |
以上命令是获取对应HENRY有多少个field成员
|
1
2
3
4
5
|
*2\r\n$5\r\nHKEYS\r\n$5\r\nHENRY\r\n |
S:
如果不存在任何字段信息
|
1
|
*0\r\n |
如果存在QQ字段信息
|
1
2
3
|
*1\r\n$2\r\nQQ\r\n |
HMGET
C:
|
1
|
HMGET HENRY QQ |
以上命令是获取HENRY的QQ信息。
|
1
2
3
4
5
6
7
|
*3\r\n$5\r\nHMGET\r\n$5\r\nHENRY\r\n$2\r\nQQ\r\n |
S:
如果不存在字段值
|
1
2
|
*1\r\n$-1\r\n |
存在字段值
|
1
2
3
|
*1\r\n$8\r\n28304340\r\n |
以上主要列举Redis普遍处理的一些情况,由于指令太多就不一一列举了,如果有需要自己实现Client的朋友可以到Redis官方看相关命令文档。
分享一下新完成的功能
设置用户的UserBase和Contact字段信息
|
1
2
3
4
5
6
7
8
9
10
11
12
|
UserBase user = new UserBase(); user.Name = "henryfan"; user.City = "guangzhou"; user.Counrty = "cn"; user.Age = 18; Contact contact = new Contact(); contact.EMail = "henryfan@msn.com"; contact.Phone = "111111"; contact.QQ = "28304340"; ProtobufRecord pr = new ProtobufRecord("henryfan_pb"); pr.Set<UserBase>(user).Set<Contact>(contact); pr.Save(db); |
获取指定用户的UserBase和Contact字段信息
|
1
2
3
4
5
6
|
ProtobufRecord pr = new ProtobufRecord("henryfan_pb"); pr.Load<UserBase, Contact>(db); foreach (Field item in pr.Fields) { Console.WriteLine("{0}:{1}", item.Name, item.Value); } |
Redis协议详解的更多相关文章
- Redis学习——详解Redis配置文件(三)
一.Redis脚本简介 在我们介绍Redis的配置文件之前,我们先来说一下Redis安装完成后生成的几个可执行文件: redis-server .redis-cli .redis-benchmark ...
- HTTP协议详解(转)
转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...
- HTTP协议详解
Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展. ...
- redis配置详解
##redis配置详解 # Redis configuration file example. # # Note that in order to read the configuration fil ...
- 动态选路、RIP协议&&OSPF协议详解
动态选路.RIP协议&&OSPF协议详解 概念 当相邻路由器之间进行通信,以告知对方每个路由器当前所连接的网络,这时就出现了动态选路.路由器之间必须采用选路协议进行通信,这样的选路协议 ...
- ASP.NET知识总结(3.HTTP协议详解)
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- 接口测试之HTTP协议详解
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- 计算机网络(12)-----HTTP协议详解
HTTP协议详解 http请求 http请求由三部分组成,分别是:请求行.消息报头.请求正文 (1)请求行 请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Metho ...
- OSPF协议详解
CCNP OSPF协议详解 2010-02-24 20:30:22 标签:CCNP 职场 OSPF 休闲 OSPF(Open Shortest Path Fitst,ospf)开放最短路径优先协议,是 ...
随机推荐
- C#面向对象复习概要
1.面向对象:我们将具有统一行为和属性的对象抽象划分为类,通过类去创建对象.这种编程思想叫做面向对象的编程思想. 2.属性:对象具有的属性 using System; using System.Col ...
- PHP採集CSDN博客边栏的阅读排行
项目中要用到採集的数据,所以就先拿CSDN博客来试了试.这里使用Simple HTML DOM(官网)这个库,它可以方便的遍历HTML文档. <?php include_once('simple ...
- 如何使用linq操作datatable进行分组
使用微软.net的孩子们应该都知道linq吧,要知道linq可是其他高级语言没有的技术,比如php,java等等,但是起初我对linq的认识只是停留在对 list<> 的泛型集合进行操作, ...
- LayOutControl
DevExpress DXperience 12.2 在 Navigation & Layout 中 有个 LayOutControl 它适用于做布局,我们普通控件 长宽 只能给固定的值,这个 ...
- Dungeon Master poj 2251 dfs
Language: Default Dungeon Master Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16855 ...
- ORACLE PL/SQL编程之八:把触发器说透
原文:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 ...
- 分区表在安装系统(MBR)丢失或损坏
操作系统能识别出硬盘中的各个不同的分区,是靠硬盘分区表(MBR)来识别的. 硬盘分区表中记录了各个分区的位置和大小以及类型等信息,假设这个分区表破坏了,那么这块硬盘里面的分区就会丢失.系统是无法在浏览 ...
- 通过localstorage和cookie实现记录文章的功能
我们在做页面的时候,会考虑记录用户曾经看过的文章的功能,并记录下来在页面中显示!但是在IE低版本的下是不支持localstorage的功能,只能采用cookie来代替本地存储的功能!实现的方法如下! ...
- WinForm窗体淡入效果界面的简单实现方法
WinForm窗体淡入效果主要使用到控件的Opacity属性 首先在WinForm窗体中拖入一个Timer控件,然后再Timer控件的Tick事件添加如下代码: private void timer1 ...
- Mysql高级之触发器
原文:Mysql高级之触发器 触发器是一类特殊的事务 ,可以监视某种数据操作(insert/update/delete),并触发相关操作(insert/update/delete). 看以下事件: 完 ...