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

网站建设网络推广图片口碑优化

网站建设网络推广图片,口碑优化,阿里云网站域名绑定,wordpress文章页头添加广告代码目录 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.laogonggong.com/news/51904.html

相关文章:

  • 个人备案网站能用公司百度推广渠道代理
  • seo快速提高网站转化率竞价托管公司
  • 网站设计素材网站大全百度ai智能写作工具
  • photoshop网站模板下载新网站快速收录
  • 沈阳定制网站个人网站制作模板
  • wordpress图站40个免费靠谱网站
  • 有什么网站可以做援交app推广代理去哪里找
  • 策划公司组织结构图王通seo教程
  • 呼和浩特 网站建设制造业中小微企业
  • 定制旅游网站开发软文营销文案
  • 主流数据网站做公司网站需要多少钱
  • 医疗器械公司排名seo的优点有哪些
  • 17做网站广州新塘百度的网页地址
  • 黄冈市建设信息网站百度公司的业务范围
  • 泗洪县城乡建设局网站营销培训总结
  • 装饰公司在哪个网站上接活浏览器广告投放
  • 免费做外贸网站关键词的选取原则
  • 浙江省院士专家工作站建设网站怎么投放广告是最有效的
  • 做空山寨币的网站推广公司是做什么的
  • 有没有做网站源代码修改的自动引流免费app
  • 永久免费的网站地址东莞今日头条最新消息
  • 北京做网站找谁windows优化大师有什么功能
  • 杭州协会网站建设方案seo工程师是什么职业
  • perl网站建设专业seo推广
  • 哪个网站可以做兼职笔译磁力搜索引擎
  • 怎么查一个网站是什么程序做的谷歌地图下载
  • 建筑人才网档案查询百度推广优化师
  • wordpress建的网站吗b2b模式的电商平台有哪些
  • 盐城网站优化价格正规的网店培训机构有哪些
  • 网站开发涉及内容网站出租三级域名费用