使用Java操作Redis(一)

Redis是一款基于key-value的数据库服务器,安装完成后我们可以通过redis-cli使用Redis提供的命令完成各种操作。redis-cli实际上就是一款客户端,和redis-server建立网络连接,然后以一定的格式(称为网络协议)向服务器端发送数据,redis-server根据客户端的请求进行处理并返回相应的结果。
使用Java操作Redis,本质上就是编写Redis的客户端应用,因此我们必须了解Redis自定义的网络协议。

Redis协议官方地址:http://redis.io/topics/protocol
请求协议的一般格式为:

*<参数的个数> CR LF
$<参数1字节数> CR LF
 <参数1> CR LF
...
$<参数n字节数> CR LF
 <参数n> CR LF

举个例子:set name Jane命令应该对应的以下形式

*3 CR LF  //三个参数
$3 CR LF  //第一个参数set有3个字节
SET CR LF //参数内容set
$4 CR LF  //第二个参数name占4个字节
name CR LF //参数二内容 name
$4 CR LF  //第三个参数有4个字节
Jane CR LF//参数三内容 Jane

对应的字符串形式为"*3\r\n$3\r\nset$4\r\nname$4\r\nJane\r\n

Redis命令会返回多种不同类型的回复,通过检查返回数据的第一个字节可以确定具体的类型:

  • 状态回复(status reply)的第一个字节是 “+”
  • 错误回复(error reply)的第一个字节是 “-“
  • 整数回复(integer reply)的第一个字节是 “:”
  • 批量回复(bulk reply)的第一个字节是 “$”
  • 多条批量回复(multi bulk reply)的第一个字节是 “*”

了解了这些后我们就可以在Java中和Redis服务器建立Socket连接,然后將指令按照Redis协议格式发送到服务器端,从而达到操作Redis的目的。

代码如下:

    try {
            Socket sock = new Socket("127.0.0.1",6379);

            OutputStream out = sock.getOutputStream();
            InputStream in = sock.getInputStream(); 
            //set name rongbo_j
            String sendStr = 
                "*3\r\n$3\r\nSET\r\n$4\r\nname\r\n$8\r\nrongbo_j\r\n";
            out.write(sendStr.getBytes());
            //get name
            sendStr = "*2\r\n$3\r\nGET\r\n$5\r\nname\r\n";
            out.write(sendStr.getBytes());

            byte[] buffer = new byte[512];
            in.read(buffer);
            System.out.println(new String(buffer));

        } catch (Exception e) {
            e.printStackTrace();
        }

可以看到如果不对代码进行封装,使用起来是相当繁琐的,下一篇文章介绍如何使用Jedis工具来简化操作。

你可能感兴趣的:(redis)