zoukankan      html  css  js  c++  java
  • 手写redis客户端

    一、RESP通信协议

            Redis Serialization Protocol (Redis序列化协议).

            特点:容易实现、解析快、可读性强

            以 分割数据.

    二、撸代码

    package com.dongnao.demo;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    /**
     * Created by crescendo.tian on 2018/8/27.
     */
    public class TqRedis {
    
        private Socket socket;
        private OutputStream write;
        private InputStream read;
    
        public TqRedis(String host, int port) throws IOException {
            socket = new Socket(host, port);
        }
    
        public void set(String key, String val) throws IOException {
            StringBuffer sb = new StringBuffer();
            sb.append("*3").append("
    ");//代表3个参数
            sb.append("$3").append("
    ");//第一个参数的长度
            sb.append("SET").append("
    ");//第一个参数的内容
    
            sb.append("$").append(key.getBytes().length).append("
    ");//第二个参数长度
            sb.append(key).append("
    ");//第二个参数内容
    
            sb.append("$").append(val.getBytes().length).append("
    ");//第三个参数长度
            sb.append(val).append("
    ");//第三个参数内容
    
            write.write(sb.toString().getBytes());
            byte[] bytes = new byte[1024];
            read.read(bytes);
            System.out.println("set---------------------------------------------");
            System.out.println(new String(bytes));
        }
    
        public void get(String key) throws IOException {
            StringBuffer sb = new StringBuffer();
            sb.append("*2").append("
    ");//代表2个参数
            sb.append("$3").append("
    ");//第一个参数长度
            sb.append("GET").append("
    ");//第一个参数的内容
    
            sb.append("$").append(key.getBytes().length).append("
    ");//第二个参数长度
            sb.append(key).append("
    ");//第二个参数内容
    
            write.write(sb.toString().getBytes());
            byte[] bytes = new byte[1024];
            read.read(bytes);
            System.out.println("get---------------------------------------------");
            System.out.println(new String(bytes));
        }
    
        public static void main(String[] args) throws IOException {
            TqRedis jedis = new TqRedis("127.0.0.1", 6379);
            jedis.set("test", "001");
            jedis.get("test");
        }
    
    }

     三、引用

    https://www.jianshu.com/p/c0c18f9f5494

  • 相关阅读:
    Django继承user类来定制自己的user类
    pycharm下载 安装 使用
    360 so动态脱壳
    爱加密so保护简单脱壳测试
    菜鸟 学注册机编写之 “sha1”
    海海DRM视频保护解密流程分析
    通过CreateThreadpoolWait执行Shellcode
    .net学习--Fastjson反序列漏洞
    .net JavaScriptSerializer反序列化漏洞
    java web安全(自定义Classloader)--服务器端动态解析二进制class文件
  • 原文地址:https://www.cnblogs.com/sunrisexq/p/9545081.html
Copyright © 2011-2022 走看看