当前位置: 首页 > news >正文

重庆做兼职哪个网站郴州市有几个县

重庆做兼职哪个网站,郴州市有几个县,河源定制网站建设推广,企业网站制作规划目录 RESP协议 概述 数据类型 模拟Redis客户端 RESP协议 概述 Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub): 客户端(client)向服务端(server)发送一条命…

目录

RESP协议

概述

数据类型

模拟Redis客户端


RESP协议

概述

Redis是一个CS架构的软件,通信一般分两步(不包括pipeline和PubSub):

  1. 客户端(client)向服务端(server)发送一条命令
  2. 服务端解析并执行命令,返回响应结果给客户端

因此客户端发送命令的格式、服务端响应结果的格式必须有一个规范,这个规范就是通信协议

在Redis中采用的是RESP(Redis Serialization Protocol)协议:

  • Redis 1.2版本引入了RESP协议
  • Redis 2.0版本中成为与Redis服务端通信的标准,称为RESP2
  • Redis 6.0版本中,从RESP2升级到了RESP3协议,增加了更多数据类型并且支持6.0的新特性---客户端缓存

目前,默认使用的依然是RESP2协议(RESP)

数据类型

在RESP中,通过首字节的字符来区分不同数据类型,常用的数据类型包括5种:

1.单行字符串:首字节是 ‘+’ ,后面跟上单行字符串,以CRLF( "\r\n" )结尾,例如,返回"OK": "+OK\r\n"

2.错误(Errors):首字节是 ‘-’ ,以CRLF( "\r\n" )结尾,只是字符串是异常信息,例如:"-Error message\r\n"

3.数值:首字节是 ‘:’ ,后面跟上数字格式的字符串,以CRLF结尾,例如:":10\r\n"

4.多行字符串:首字节是 ‘$’ ,表示二进制安全的字符串,最大支持512MB:

  • 如果大小为0,则代表空字符串:"$0\r\n\r\n"
  • 如果大小为-1,则代表不存在:"$-1\r\n"

5.数组:首字节是 ‘*’,后面跟上数组元素个数,再跟上元素,元素数据类型不限

模拟Redis客户端

Redis支持TCP通信,因此可以使用Socket来模拟客户端,与Redis服务端建立连接:

public class Main {static Socket s;static PrintWriter writer;static BufferedReader reader;public static void main(String[] args) {try {// 1.建立连接String host = "192.168.150.101";int port = 6379;s = new Socket(host, port);// 2.获取输出流、输入流writer = new PrintWriter(new OutputStreamWriter(s.getOutputStream(), StandardCharsets.UTF_8));reader = new BufferedReader(new InputStreamReader(s.getInputStream(), StandardCharsets.UTF_8));// 3.发出请求// 3.1.获取授权 auth 123321sendRequest("auth", "123321");Object obj = handleResponse();System.out.println("obj = " + obj);// 3.2.set name 张三sendRequest("set", "name", "张三");// 4.解析响应obj = handleResponse();System.out.println("obj = " + obj);// 3.2.set name 张三sendRequest("get", "name");// 4.解析响应obj = handleResponse();System.out.println("obj = " + obj);// 3.2.set name 张三sendRequest("mget", "name", "num", "msg");// 4.解析响应obj = handleResponse();System.out.println("obj = " + obj);} catch (IOException e) {e.printStackTrace();} finally {// 5.释放连接try {if (reader != null) reader.close();if (writer != null) writer.close();if (s != null) s.close();} catch (IOException e) {e.printStackTrace();}}}private static Object handleResponse() throws IOException {// 读取首字节int prefix = reader.read();// 判断数据类型标示switch (prefix) {case '+': // 单行字符串,直接读一行return reader.readLine();case '-': // 异常,也读一行throw new RuntimeException(reader.readLine());case ':': // 数字return Long.parseLong(reader.readLine());case '$': // 多行字符串// 先读长度int len = Integer.parseInt(reader.readLine());if (len == -1) {return null;}if (len == 0) {return "";}// 再读数据,读len个字节。假设没有特殊字符,所以读一行(简化)return reader.readLine();case '*':return readBulkString();default:throw new RuntimeException("错误的数据格式!");}}private static Object readBulkString() throws IOException {// 获取数组大小int len = Integer.parseInt(reader.readLine());if (len <= 0) {return null;}// 定义集合,接收多个元素List<Object> list = new ArrayList<>(len);// 遍历,依次读取每个元素for (int i = 0; i < len; i++) {list.add(handleResponse());}return list;}// set name 张三private static void sendRequest(String ... args) {writer.println("*" + args.length);for (String arg : args) {writer.println("$" + arg.getBytes(StandardCharsets.UTF_8).length);writer.println(arg);}writer.flush();}
}
http://www.sczhlp.com/news/147738/

相关文章:

  • 本溪食品 中企动力提供网站建设如何免费推广自己的产品
  • 网站从建设到运营管理的理解云浮哪有公司做网站的
  • html5网站代理青海最新消息今天
  • 天府新区建站公司太原网络营销公司
  • wordpress资讯网站模板百度网站主要提供的服务
  • 诸暨广川建设公司网站网站建设公司业务在哪里来
  • 政务类网站使用wordpress函数
  • e福州官方网站什么是电子商务法
  • 标签化模板之styled-components原理
  • Halcon基础——图像增强
  • 潍坊建公司网站无锡网络营销平台
  • 用什么做网站 优化算命网站开发电话
  • 网站开发多少钱一单公司网站开发主流语言
  • 阿里巴巴seo站内优化方法制作网页网站教程
  • 网站推广任务 ip点击wordpress怎么进登录界面
  • 中国移动门户网站网站建设论文伯乐在线
  • 找别人做网站多少钱好看的设计网站
  • 泰州cms建站模板小公司网站如何做
  • 微信二维码制作网站上海广告公司工资多少
  • win10做网站传统旅行社如何建设网站
  • 自己开的网站 可以做代销吗阳江12345网络问政平台
  • 网站管理后台下载一个大学网站做的好坏于否的标准
  • 南通网站公司网络销售面试问题有哪些
  • 有哪些好的做兼职的网站有哪些陕西网站建设公司哪有
  • 哈尔滨网站建设美丽手机商店下载安装
  • 网站开发项目挣钱吗aso优化报价
  • 同类色相的网站百度网络营销app
  • 泰州高端网站建设桂林人论坛怎么注册
  • php开源免费网站模板网站主题下载
  • 网站做收录要多少长时间护肤品网站建设需求分析