博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jedis 1.0.0 版 源码分析系列2:Connection.java
阅读量:5760 次
发布时间:2019-06-18

本文共 3886 字,大约阅读时间需要 12 分钟。

hot3.png

package redis.clients.jedis;import redis.clients.util.RedisInputStream;import redis.clients.util.RedisOutputStream;import java.io.*;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;import java.util.ArrayList;import java.util.List;public class Connection {    private String host;//ip    private int port = Protocol.DEFAULT_PORT;//端口    private Socket socket;//socket句柄    private Protocol protocol = new Protocol();//具体操作对象    private RedisOutputStream outputStream;//socket的输出流    private RedisInputStream inputStream;//socket的输入流    private int pipelinedCommands = 0;//管道命令计数器    private int timeout = 2000;//socket超时时间    public int getTimeout() {//获取socket超时时间	return timeout;    }    public void setTimeout(int timeout) {//设置socket超时时间	this.timeout = timeout;    }    public void setTimeoutInfinite() {//设置无穷大超时时间	try {	    socket.setSoTimeout(0);	} catch (SocketException ex) {	    throw new JedisException(ex);	}    }    public void rollbackTimeout() {//回滚超时时间设置	try {	    socket.setSoTimeout(timeout);	} catch (SocketException ex) {	    throw new JedisException(ex);	}    }    public Connection(String host) {//够早一个connection	super();	this.host = host;    }    protected Connection sendCommand(String name, String... args) {		try {			connect();//连接server		} catch (UnknownHostException e) {			throw new JedisException("Could not connect to redis-server", e);		} catch (IOException e) {			throw new JedisException("Could not connect to redis-server", e);		}	protocol.sendCommand(outputStream, name, args);//发送命令	pipelinedCommands++;//增加计数器	return this;    }    public Connection(String host, int port) {//构造connection	super();	this.host = host;	this.port = port;    }    public String getHost() {//获取IP	return host;    }    public void setHost(String host) {//设置IP	this.host = host;    }    public int getPort() {//获取端口	return port;    }    public void setPort(int port) {//设置端口	this.port = port;    }    public Connection() {//构造connection    }    public void connect() throws UnknownHostException, IOException {	if (!isConnected()) {//如果没有连接,才会连接对方并且给本地变量赋值	    socket = new Socket(host, port);	    socket.setSoTimeout(timeout);	    outputStream = new RedisOutputStream(socket.getOutputStream());	    inputStream = new RedisInputStream(socket.getInputStream());	}    }    public void disconnect() {//断开连接	if (isConnected()) {	    try {		inputStream.close();		outputStream.close();//关闭流		if (!socket.isClosed()) {		    socket.close();		}//关闭socket.	    } catch (IOException ex) {		throw new JedisException(ex);	    }	}    }    public boolean isConnected() {//判断是否连接上了	return socket != null && socket.isBound() && !socket.isClosed()		&& socket.isConnected() && !socket.isInputShutdown()		&& !socket.isOutputShutdown();    }    protected String getStatusCodeReply() {//获取响应	pipelinedCommands--;	return (String) protocol.read(inputStream);    }    public String getBulkReply() {//获取响应	pipelinedCommands--;	return (String) protocol.read(inputStream);    }    public int getIntegerReply() {//获取响应	pipelinedCommands--;	return ((Integer) protocol.read(inputStream)).intValue();    }    @SuppressWarnings("unchecked")    public List
getMultiBulkReply() {//获取响应 pipelinedCommands--; return (List
) protocol.read(inputStream); } @SuppressWarnings("unchecked") public List
getObjectMultiBulkReply() {//获取响应 pipelinedCommands--; return (List) protocol.read(inputStream); } public List getAll() {//批量获取响应 List all = new ArrayList(); while (pipelinedCommands > 0) { all.add(protocol.read(inputStream)); pipelinedCommands--; } return all; }}

这个函数很有意思。

public boolean isConnected() {//判断是否连接上了	return socket != null && socket.isBound() && !socket.isClosed()		&& socket.isConnected() && !socket.isInputShutdown()		&& !socket.isOutputShutdown();    }

 

转载于:https://my.oschina.net/qiangzigege/blog/207739

你可能感兴趣的文章
js中的==、!=、===、!==
查看>>
基于gitosis的Git云端服务器配置
查看>>
[Web前端] 给li设置float浮动属性之后,无法撑开外层ul的问题。
查看>>
更改ubuntu的官方镜像源
查看>>
JS函数防抖与函数节流
查看>>
ubuntu如何修改只读权限的文件?chmod a+w +文件名
查看>>
资金支付 保留两位小数
查看>>
THC=TERMINAL HANDLING CHARGE,碼頭操作費
查看>>
【转】动态规划
查看>>
Oracle锁表查询与解锁
查看>>
Ubuntu中的一些设置
查看>>
声波传输、声波通信商用增强版
查看>>
函数指针使用演示样例(參考Linux-内核代码)
查看>>
(三 )kafka-jstorm集群实时日志分析 之 ---------jstorm集成spring 续(代码)
查看>>
UVa 10069 Distinct Subsequences(大数 DP)
查看>>
浅聊inode索引节点
查看>>
刷脸out了?阿里“刷脚购物”亮相CVPR 2017
查看>>
openERP笔记 自定义模块开发
查看>>
Excel 实用技巧之一
查看>>
通过CentOS 编译 Linux From Scratch (二)
查看>>