• 使用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 $3 set$4 name$4 Jane

    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
    $3
    SET
    $4
    name
    $8
    rongbo_j
    ";
                out.write(sendStr.getBytes());
                //get name
                sendStr = "*2
    $3
    GET
    $5
    name
    ";
                out.write(sendStr.getBytes());
    
                byte[] buffer = new byte[512];
                in.read(buffer);
                System.out.println(new String(buffer));
    
            } catch (Exception e) {
                e.printStackTrace();
            }

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

  • 相关阅读:
    ImageCapOnWeb控件使用说明
    网页摄像头拍照
    js调用ocx控件
    sql中 in 、not in 、exists、not exists 用法和差别
    oracle远程登录解决办法
    oracle导入导出,包括表,表结构,方案,数据库
    字典树
    线段树
    Til the Cows Come Home
    Forgger
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468938.html
Copyright © 2020-2023  润新知