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

news2024/11/14 7:10:48

首先要了解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回应OK
            String 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对客户端的输入响应+OK
            String 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 = clientStr.substring(22,33);
            //Redis响应
            if (clientGetStr.contains("get")){
            String resp=substring;
            os.write(resp.getBytes());
            System.out.println("服务器响应了:"+substring);
            }
            //释放资源
            os.flush();
            is.close();
            os.close();
            accept.close();
            server.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //截取最后一个字符
    public String getLastStr(String input){

        return null;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2110281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统概述及特征

(较为浅显的了解操作系统,适合小白); 目录 1. 操作系统概述 1.1 操作系统 1.2 系统软件 1.3 主要作用 2. 操作系统的特征 ​编辑 2.1 并发性​编辑 2.2 并行​编辑 2.3 共享性 2.3.1 共享概述 2.3.2 共享与并发的关系…

【机器学习】朴素贝叶斯网络的基本概念以及朴素贝叶斯网络在python中的实例

引言 文章目录 引言一、朴素贝叶斯网络1.1 基本概念1.1.1 节点1.1.2 边(Edges)1.1.3 条件独立性 1.2 特点1.2.1 结构简单1.2.2 易于理解和实现1.2.3 计算效率高 1.3 应用1.4 数学表示1.5 局限性 二、朴素贝叶斯网络在python中的实例2.1 实例背景2.2 实现…

LangChain 最新版入门实战-v0.2

LangChain 基础入门文档 1. 认识 LangChain LangChain 是一个基于大型语言模型(LLM)的应用开发框架。它通过两种方式规范和简化了使用大型语言模型的方式: 集成:让语言模型能够使用更多的信息。 代理:让语言模型能够…

Linux 磁盘增加分区并挂载

说明 目的:该篇文章主要是实操后为了备忘 原因:为了方便,直接使用已有模板创建了虚拟机。没想到创建的新机器给了300G磁盘,实际只有2个分区且只使用了100G。以下为我实操后成功增加分区并挂载的步骤。 增加分区 指定操作对象&a…

如何快速写文献综述

真实参考文献的AI论文生成器:AIPaperDone - AI 万字论文生成 在本文中,你将学习如何为不同的学术领域撰写文献综述。 请注意: 文献综述并不是关于小说或诗歌等文学作品的。当我们说"文献",我们指的是某个领域的"研究"。撰写文献综述意味着收集…

【鸿蒙】HarmonyOS NEXT星河入门到实战3-ArkTS界面起步开发

目录 一、界面开发布局思路 二、组件的属性方法 三、字体颜色 四、文字溢出省略号、行高 五、Image图片组件 六、输入框与按钮 七、综合实战- 华为登录 八、设计资源-svg图标 前言:HarmonyOS NEXTArkTS界面开发起步。开发工具:仍然是 DevEco Studio 学习界面…

Android 使用JSON动画:Lottie框架基本使用

Lottie是什么? GitHub的一种跨平台动画解决方案三方框架 使用? 3步 1.引入最新的依赖:https://github.com/airbnb/lottie-android 我写文章时最新版本是6.5.2 添加到 app/build.gradle 文件的以下方法中dependencies {//lottie 动画implementation com.airbnb.android:l…

JavaScript DOM事件流之捕获与冒泡

DOM事件流——捕获与冒泡 网页是由一个一个元素组成的,正如我们肉眼所见,网页上的元素存在包含关系,简单的点击又怎么确定到底谁来触发响应呢?想象一下,在纸上画了两个大小不同的同心圆,然后用手指指向它里…

第45篇 汇编语言实现中断<一>

Q:DE2-115_Computer System的异常与中断有哪些特点呢? A:DE2-115 Computer系统中的Nios II处理器复位地址为0x00000000。用于处理其它所有普通异常,例如除0以及硬件IRQ中断的地址为0x00000020。Nios II处理器的异常和硬件IRQ中…

C++和OpenGL实现3D游戏编程【连载8】——纹理文字实现与优化

C++和OpenGL实现3D游戏编程【连载8】——纹理文字实现与优化 1、本节达到的效果 上一节课我们介绍了在opengl中文字的显示方法,但显示出来的文字无法旋转,在某些特定游戏要求下,文字是需要进行旋转的,那么这一节课我们介绍一下纹理文字的高级使用方法,将文字生成纹理,达…

一文搞懂性能测试

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 性能测试概念 我们经常看到的性能测试概念,有人或称之为性能策略,或称之为性能方法,或称之为性能场景分类,大概…

mysql和pg等数据库之间的数据迁移实战分享

mysql和pg等数据库之间的数据迁移是常见的问题:比如一开始使用Oracle,后来想使用mysql,而且需要把Oracle数据库的数据迁移到mysql里面;后期有想使用pg数据库,同时需要把Mysql数据库的数据迁移到pgl里面,等等…

shell脚本编写之函数

shell中的函数定义比较简单,定义函数名可以没有类型,函数返回值可有可无,如果有返回值,必须返回整数n(0~255)。同时,函数的定义必须放在shell脚本的开头部分,只有函数被shell解释器发…

【微机】DOSBox在windows上的安装和masm的配置

本文首发于 ❄️慕雪的寒舍 最近学校学习微型计算机原理与接口技术,需要用到DOSBox来模拟DOS环境进行汇编编程的学习。 本文记录了如何在windows11/10上安装DOSBox0.74并配置masm5 1.安装 这两个软件我打包上传到了百度云盘。放心,加起来也就2mb&…

【多线程】死锁

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 死锁的三种情况1.1 一个线程一把锁(同一个线程给同一个对象加两次锁的情况)1.2 两…

Save OpenAI response in Azure function to Blob storage

题意:将 OpenAI 的响应保存在 Azure 函数中到 Blob 存储 问题背景: I used blob trigger template to create an Azure function that is triggered by new file updated in Azure blob storage. I am using python v2 to create Azure function in VSc…

SAP ABAP任意表数据查询+快速下载工具

背景: 项目上业务顾问有时候需要下载标准表大量的数据到Excel进行一些比对,但是标准SE16N,SE16的下载电子表格功能在遇到大批量数据的时候会非常慢,于是抽空写了个通用的查询下载工具,可以快速的下载数据。 工具界面&…

Linux - Linux安装部署xxl-job

一、下载源码 xxl-job源码地址: https://github.com/xuxueli/xxl-job 2.4.2版本为例:https://github.com/xuxueli/xxl-job/archive/refs/tags/2.4.1.tar.gz xxl-job文档地址: 分布式任务调度平台XXL-JOB 二、安装依赖环境 因为需要…

Go语言中的RPC协议原理解析

Go语言中的RPC协议原理解析 在分布式系统中,不同的服务或组件通常运行在不同的计算机或进程上。为了实现这些服务之间的通信,我们可以使用RPC(Remote Procedure Call,远程过程调用)协议。RPC允许我们像调用本地函数一…

【区块链 + 人才服务】FISCO BCOS 高校实训和管理平台 | FISCO BCOS应用案例

深圳市火链文化传播有限公司建设部署 FISCO BCOS 高校实训和管理平台,这是一条多领域覆盖的联盟链,以高 校 政府教育部门 合作企业共同授权成为联盟链节点,实现在政府指导监管下,多行业扩展、多机构参与、多 平台共存的联盟链模…