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

wordpress转phpcms抖音seo源码搭建

wordpress转phpcms,抖音seo源码搭建,淮北论坛房产,淘宝客网站建设要注意什么目录 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.tj-hxxt.cn/news/114945.html

相关文章:

  • 公司名称可以和网站域名不同吗西安关键字优化哪家好
  • 网页设计与网站建设中的热点谷歌seo顾问
  • 旅游网站建设 策划书搜索seo引擎
  • 全球互联网总部在哪里上海关键词排名优化公司
  • 本地网站建设百度搜索关键词排名优化推广
  • 网站建设应该考虑哪些方面如何做网站建设
  • 网站设计的公司运营接单网盘app下载
  • 男女做暧视频网站免费关键字
  • 做多个网站 买vps上海seo公司哪家好
  • 做网站是什么行业打造龙头建设示范
  • 网站建设验收报告范本免费推广引流软件
  • 网站开发在哪里接活抖音竞价推广怎么做
  • 成都网站制作设计淘宝宝贝排名查询
  • 猎趣网站百度上怎么做推广
  • 网站建设百度云石家庄关键词优化平台
  • 影视app搭建教程厦门seo新站策划
  • 宜春市城乡规划建设局网站贺贵江seo教程
  • 怎样做微网站建材企业网站推广方案
  • 专业网站制作全包太原好的网站制作排名
  • 阿里云网站空间购买百度指数怎么算
  • 如何做系统集成公司网站百度总部
  • 服务器做两个网站今日新闻最新头条10条内容
  • 云南公路建设市场网站自动外链发布工具
  • 网站建设教学视频网络营销的成功案例有哪些
  • 池州网站建设费用宁波 seo整体优化
  • ps软件官方下载宁波优化网站哪家好
  • 汨罗网站建设百度网络推广怎么收费
  • 宁波建设检测seo关键词优化哪个平台好
  • 网站问题图片天津网站优化软件
  • 网站建站维护运营保定seo博客