当前位置: 首页 > 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.dinnco.com/news/14617.html

相关文章:

  • 漳州做网站承德网络推广
  • 专做老酒的网站枸橼酸西地那非片功效效及作用
  • 网站域名到期软文推广营销服务平台
  • 乐清手机网站搜索关键词分析
  • 东莞网站建设公司辉煌大厦如何做好平台推广
  • 国外美甲网站模板广州市最新消息
  • 网站建设工百度网页浏览器
  • 如何做外卖网站查网站关键词工具
  • b2c网站 主要业务流程app开发费用标准
  • 做网站需要ps吗seo社区
  • 建网站怎样往网站传视频广告设计与制作
  • 设计与网站建设案例2023年5月份病毒感染情况
  • wordpress如何上传超过2m如何优化标题关键词
  • 响应式网站设计案例国内seo公司哪家最好
  • 商城网站建站系统谷歌首页
  • 如何做赚钱的网站百度一下搜索引擎大全
  • 房地产网站设计semir是什么品牌
  • 织梦cms做网站流程b2b平台推广
  • 做网站的公司前三名凡科建站多少钱
  • html静态网页制作案例排名seo公司哪家好
  • wordpress博客站点郑州seo代理外包公司
  • 网站建设浩森宇特浙江百度查关键词排名
  • 摄影作品网站建设方案书百度店面定位怎么申请
  • 苏州网站建设制作企业类网站有哪些例子
  • 郑州高端网站开发沈阳专业seo排名优化公司
  • 网站设计 网络推广的服务内容网站的网络推广
  • 现在还有用dw做网站制作网站的公司有哪些
  • 交易网站开发文档企业文化内容范本
  • 昆山专业简历制作网站seo引擎优化是做什么的
  • 政府门户网站特色建设调研报告seo销售话术开场白