美文网首页
Jedis原理简介

Jedis原理简介

作者: 守住阳光 | 来源:发表于2018-06-13 19:32 被阅读0次

一、Jedis介绍

        Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对各类API进行封装调用。

二、Redis通信协议

        Redis通信协议是Redis客户端与Redis之间交流的语言,通信协议规定了命令和返回值的格式。Redis支持两种通信协议,一种是二进制安全地统一请求协议另一种是比较直观的便于在telnet程序中输入的简单协议。这两种协议只是命令的格式有区别,命令返回值的格式是一样的。

(一)、简单协议

        简单协议适合在telnet程序中与redis进行通信。简单协议的命令格式就是将命令和各个参数使用空格分隔开,如“EXISTS  foo”、“SET foo bar”等。由于redis解析简单协议时只是简单地以空格分隔参数,所以无法输入二进制值。

(二)、统一请求协议

        统一请求协议时从redis1.2开始加入的,其命令格式和多行字符串回复的格式很类似,如SET foo bar 的统一请求协议的写法是:*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\nbar\\r\n。如果开发redis客户端,推荐使用此协议。Jedis使用二进制安全地统一请求协议与redis进行通信。

三、模拟的jedis通信原理

废话不说,先上代码。

public class TSocketClient {

    //定义socket

    private Socket socket;

    public TSocketClient(){

        try {

            socket = new Socket("127.0.0.1",6379);

         } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        }

    }

    public String set(final String key , final String value) throws IOException{

        StringBuilder sb = new StringBuilder();

        sb.append("*3").append("\r\n");

        sb.append("$3").append("\r\n");

        sb.append("set").append("\r\n");

        sb.append("$").append(key.getBytes().length).append("\r\n");

        sb.append(key).append("\r\n");

        sb.append("$").append(value.getBytes().length).append("\r\n");

        sb.append(value).append("\r\n");

        socket.getOutputStream().write(sb.toString().getBytes());

        byte[] b = new byte[2048];

        socket.getInputStream().read(b);

        return new String(b);

    }

     public String get(final String key) throws IOException{

        StringBuilder sb = new StringBuilder();

        sb.append("*2").append("\r\n"); //*表示数组 后面数字表示数组长度

        sb.append("$3").append("\r\n");

        sb.append("get").append("\r\n");

        sb.append("$").append(key.getBytes().length).append("\r\n"); //美元符号表示字符串,后面的数字表示长度

        sb.append(key).append("\r\n");

        socket.getOutputStream().write(sb.toString().getBytes());

        byte[] b = new byte[2048];

        socket.getInputStream().read(b);

        return new String(b);

    }

}

        Jedis 客户端通过建立socket与redis进行通信。根据统一请求协议规则:*表示数组,后面的数字表示数组长度,$表示字符串,后面的数字表示字符串长度。所以set foo bar 按统一请求协议就是*3\r\n$3\r\nSET\r\n$3\r\nfoo\r\n$3\r\nbar\r\n。redis客户端回复为OK。上面的代码实现了set命令和get命令,大家可以自己进行测试。

相关文章

  • Jedis原理简介

    一、Jedis介绍 Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对各...

  • 5.7-SpringBoot整合Jedis+Lettuce客户端

    SpringBoot整合Jedis+Lettuce客户端连接池配置实战 简介:SpringBoot整合Jedis+...

  • Jedis总览

    Jedis简介 作为Redis官方推荐的三个Java Client之一,Jedis推出时间最早,使用最为广泛(Sp...

  • 【赏码会】Redis的最佳拍档:Jedis

    Jedis简介 作为Redis官方推荐的三个Java Client之一,Jedis推出时间最早,使用最为广泛(Sp...

  • jedis源码解析

    说明:本文的源代码是3.1.0版本 结论 总的来说,Jedis原理大概是这样的:a、首先创建Jedis创建时需要提...

  • jedis分片原理剖析

    Redis2.0+版本不支持服务器分片,只能通过jedis分片,3.0+以上支持hash槽的服务端分片。jedis...

  • jedis原理解析

    1. Redis通信协议 Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对re...

  • Jedis原理解析

    1. Redis通信协议 Jedis Client是Redis官网推荐的一个面向java客户端,库文件实现了对re...

  • EMMC

    eMMC 原理 1 :Flash Memory 简介 eMMC 原理 2 :eMMC 简介 eMMC 原理 3 :...

  • Redis客户端

    Redis客户端 一、Java客户端:Jedis 1.获取Jedis Jedis是什么?Maven依赖 Jedis...

网友评论

      本文标题:Jedis原理简介

      本文链接:https://www.haomeiwen.com/subject/jnmreftx.html