Java-IDEA模拟一个Redis服务器,与Redis客户端进行一次简单的交互。默认端口号:6379

本文主要是介绍Java-IDEA模拟一个Redis服务器,与Redis客户端进行一次简单的交互。默认端口号:6379,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先要了解Redis的交互协议。

摘抄:

  1. 简单字符串(Simple Strings): 以 “+” 开头,例如 “+OK\r\n” 表示一个成功的响应。
  2. 错误(Errors): 以 “-” 开头,例如 “-ERR unknown command\r\n” 表示一个错误响应。
  3. 整数(Integers): 以 “:” 开头,例如 “:1000\r\n” 表示整数1000。
  4. 批量字符串(Bulk Strings): 以 “$” 开头,例如 “$6\r\nfoobar\r\n” 表示一个长度为6的字符串 “foobar”。
  5. 数组(Arrays): 以 “*” 开头,例如 “*3\r\n:1\r\n:2\r\n:3\r\n” 表示包含3个整数的数组 [1, 2, 3]。

 最好设置Redis是无密码允许访问。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;/*** @ Annotation:模拟Redis服务器 port=6379*/
public class RedisHost {/*** 1.客户端连接命令:COMMAND* 2.RedisHost response "OK"* 3.客户端发送命令* 4.RedisHost response "OK"(如果是"set"命令)* 5.客户端发送命令* 6.RedisHost response "value"(如果是"get")命令* @param args*/public static void main(String[] args) {try {byte[] bytes = new byte[1024];ServerSocket server = new ServerSocket();InetSocketAddress address = new InetSocketAddress("127.0.0.1", 6379);server.bind(address);Socket accept = server.accept();InputStream is = accept.getInputStream();//客户端带宽//客户端连接int clientCon = is.read(bytes);System.out.println("客户端连接:" + new String(bytes, 0, clientCon));OutputStream os = accept.getOutputStream();//Redis服务器带宽//Redis回应OKString hostRespCon = "+OK\r\n";os.write(hostRespCon.getBytes());os.flush();System.out.println("客户端与Redis服务器连接成功,Redis服务器响应了:" + hostRespCon);System.out.println("客户端可以继续输入内容");//等待客户端输入。。。。//读取客户端的第一次输入int clientSet = is.read(bytes);String clientStr = new String(bytes, 0, clientSet);System.out.println("客户端第一次输入了:" + clientStr);//Redis对客户端的输入响应+OKString hostRespSet = "+OK\r\n";os.write(hostRespSet.getBytes());os.flush();System.out.println("客户端输入成功,Redis服务器响应了:" + hostRespSet);//客户端再次输入System.out.println("客户端可以继续输入内容");int clientGet = is.read(bytes);String clientGetStr = new String(bytes, 0, clientGet);System.out.println("客户端又输入了:" + clientGetStr);//组装语句String substring = getLastStr(clientStr);//值//Redis响应if (clientGetStr.contains("get")) {if (getLastStr(clientGetStr).equals(getKey(clientStr))){os.write(substring.getBytes());System.out.println("服务器响应了:" + substring);}else {String notExist="*-1\r\n$3\r\nnull\r\n";os.write(notExist.getBytes());System.out.println("客户端输入的键:"+getLastStr(clientGetStr)+"不存在!");}}//释放资源os.flush();is.close();os.close();accept.close();server.close();} catch (IOException e) {e.printStackTrace();}}//从后面开始截取:从最后一个字符"input"开始,截到最后。public static String getLastStr(String input) {return input.substring(input.lastIndexOf("$"));}public static String getKey(String s){return s.substring(s.indexOf(s.substring(s.indexOf("$",6))),s.lastIndexOf("$"));}
}

 

 

这篇关于Java-IDEA模拟一个Redis服务器,与Redis客户端进行一次简单的交互。默认端口号:6379的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1143702

相关文章

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

Python极速搭建局域网文件共享服务器完整指南

《Python极速搭建局域网文件共享服务器完整指南》在办公室或家庭局域网中快速共享文件时,许多人会选择第三方工具或云存储服务,但这些方案往往存在隐私泄露风险或需要复杂配置,下面我们就来看看如何使用Py... 目录一、android基础版:HTTP文件共享的魔法命令1. 一行代码启动HTTP服务器2. 关键参

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi