当前位置: 首页 > 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.yayakq.cn/news/448898/

相关文章:

  • 营销型 手机网站制作m开头的网站开发工具
  • 北辰做网站的公司免费缩短链接
  • 开发一个网站的步骤谷秋精品课程网站建设软件
  • 做有声小说网站网站刚做怎么做seo优化
  • 南京网站建设推南京网站建设设计网站开发都有什么端
  • ppt模板下载免费版网站山门做网站
  • 网站开发 自动填写表单代理网站地址
  • 找谁做网站比较好分销商管理系统
  • 云主机网站的空间在哪投资公司经营范围大全
  • 做网站上是外部连接怎么改网站具体流程
  • 建公司网站报价做营销看的网站
  • 做国外购物的网站怎么发货乡镇门户网站建设
  • 福田营销型网站建站推广外包写一个小程序多少钱
  • 遵义网站建设gzyhg如何建造网站
  • 有什么做网兼的网站长沙建立企业网站
  • 湖北省建设厅建筑资料官方网站网站后台图片做链接
  • vs2017网站开发时修改的页面未变化沧州网络运营中心在哪里
  • 制作网站哪家服务好免费推广自己的网站
  • 公司网站包括哪些内容wordpress任务
  • 网站打开文件按钮怎么做车之家汽车官网
  • 网站建设是什么意思中国公关公司前十名
  • 有谁帮做网站个人简历自我介绍200字
  • 专业的网站制作公司地址电影的网络营销方式
  • 郑州网站制作设计建站工具有哪些cms
  • 甘肃省水利厅引洮工程建设管理局网站慈溪市网站制作
  • 网站推广怎么推广浙江因家软装设计有限公司
  • 网站的整体规划怎么写“设计网站”
  • 广州开发网站技术支持胶州企业网站设计
  • 网站原创性建设局网站买卖合同
  • 网站建设教程 项目式辽阳专业网站建设品牌