初识redis协议

有关redis协议信息(https://redis.io/topics/protocol)

搭建环境

//jedis连接客户端
public class RedisClient {
    public static void main(String[] args) {
        //默认localhost,6379
        Jedis jedis = new Jedis();
        jedis.set("zhangsan","zhangsan");
        jedis.close();
    }
}
//冒充redis服务
public class RedisServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(6379);
        Socket socket = serverSocket.accept();
        byte[] bytes = new byte[1024];
        socket.getInputStream().read(bytes);
        System.out.println(new String(bytes).trim());
        socket.close();
        serverSocket.close();
    }
}
/**通过jedis服务端获取到了这个字符串
    *3			代表有三组数据
    $3			代表第一组数据长度为3
    SET			代表第一组数据内容
    $8			代表第二组数据长度为8
    zhangsan	代表第二组数据内容
    $8			代表第三组数据长度为8
    zhangsan	代表第三组数据内容
**/
//自己构建redis协议发送
public class RedisClient {
    public static void main(String[] args) throws IOException {
        //默认localhost,6379
//        Jedis jedis = new Jedis();
//        jedis.set("zhangsan","zhangsan");
//        jedis.close();
        Socket socket = new Socket("localhost", 6379);
        set(socket,"lisi","wangwu");
        byte[] bytes = new byte[1024];
        socket.getInputStream().read(bytes);
        System.out.println(new String(bytes));
        socket.close();
    }

    public static void set(Socket socket,String key,String value) throws IOException {
        StringBuffer str = new StringBuffer();
        str.append("*3\r\n");
        str.append("$3\r\n");
        str.append("SET\r\n");
        str.append("$").append(key.getBytes().length).append("\r\n");
        str.append(key).append("\r\n");
        str.append("$").append(value.getBytes().length).append("\r\n");
        str.append(value).append("\r\n");
        socket.getOutputStream().write(str.toString().getBytes());
    }

/**	发送消息后的到的回复
	+OK		许多Redis命令在成功后仅回答“ OK”(作为RESP简单字符串编码的以下5个字节):+OK\r\n
**/
posted @ 2020-10-10 23:36  深陈  阅读(89)  评论(0)    收藏  举报