5.0 Jedis简介
在此之前我们进行的操作都是通过Redis的命令行客户端redis-cli进行的,并没有介绍实际编程时如何操作Redis。
本章将会介绍Java客户端的使用方法。
5.1.1 Jedis简介
Jedis
其实可以理解为一个驱动,想一想我们在使用 java链接mysql 数据库的时候,是不是需要使用驱动: mysql-connector-java-5.1.2-bin.jar。
同样作为数据库,java链接Redis 也是需要需要驱动的,这个驱动就是 Jedis。
事实上,Redis对几十种编程语言客户端提供了支持。基本上,主流的编程语言都可以操作 redis。
在http://www.redis.cn/clients.html上可以查看redis对哪些编程语言提供了支持。以 java为例,有四种方式都可以去操作 redis.
事实上,Redis对几十种编程语言客户端提供了支持。基本上,主流的编程语言都可以操作 redis。
官方建议是使用 Jedis,J 代表的就是Java。
5.1.2 下载安装Jedis
Maven用户:
在pom.xml文件中添加
<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.6.0</version> <type>jar</type> <scope>compile</scope> </dependency>
非Maven用户:
Jedis所有版本的下载地址为: https://github.com/xetorthio/jedis/releases
本文使用的是最新版本 V2.6.2
下载完成之后,进入 src\main\java,将里面的redis 文件夹拷贝到项目的 src目录下。此外你还要导入另外一个 jar, commons-pool2-2.0.jar ,Jedis需要依赖这个 jar才能编译成功。
5.1.3 HelloRedis
关于以下代码,暂时不用深究,只是为了测试开发环境是否搭建成功,后面的教程中会有详细的讲解。
package com.tianshouzhi; import redis.clients.jedis.Jedis; /** * HelloRedis : * 第一个 Redis案例:向 Redis 中存储一个键值对,然后再查询出来并打印 * @author tianshouzhi * */ public class HelloRedis { public static void main(String[] args ) { //Connecting to Redis server on localhost Jedis jedis = new Jedis("localhost"); System.out.println("Connection to server sucessfully"); //check whether server is running or not System.out.println("Server is running: "+jedis.ping()); } }
运行代码,如果你的控制台打印出来以下内容
Connection to server sucessfully Server is running: PONG
恭喜你,你已经成功的进行了一次 java对redis 进行的操作。同时证明我们了我们的开发环境已经搭建好。
说明:Jedis对象是在 java中操作redis 最核心的类,当 new的时候,就与服务器建立了连接。在后面的代码中,我们将不会再重复这个 new的过程,只介绍其api如何使用。
5.1.4可能的异常
如果你出现了异常ConnectionTimeoutException,连接超时异常,那么可能是:
1、 因为你的ip地址输错,使用ifconfig可以查看你的linux的ip地址信息
2、 如果不是第一个原因,则可能是因为你的服务器防火墙没有针对6379端口开放,redis默认监听的就是这个端口,为了方便,可以选择直接关闭防火墙.命令为:service iptables stop
3、如果redis-server不是在6379端口启动,那么使用redis-cli连接的时候需要指定端口号。同理,这种情况下,使用java操作redis,也要指定端口等信息。
5.1.5Jedis设计
Jedis作为推荐的java语言redis客户端,其抽象封装为三部分:
对象池设计:Pool,JedisPool,GenericObjectPool,BasePoolableObjectFactory,JedisFactory
面向用户的redis操作封装:BinaryJedisCommands,JedisCommands,BinaryJedis,Jedis
面向redis服务器的操作封装:Commands,Client,BinaryClient,Connection,Protocol
其类设计图如下:
关于common-pool的相关内容,可以参见:http://macrochen.iteye.com/blog/320077
其他类的设计作用如下:
类名 | 职责 |
Pool | 抽象Jedis对象池操作;并委托给操作给GenericObjectPool |
JedisPool | 实现Pool并提供JedisFactory工厂 |
JedisFactory | 实现BasePoolableObjectFactory,提供创建,销毁Jedis方法 |
BinaryJedisCommands | 抽象面向客户端操作的Redis命令;key,value都为序列化后的byte数组 |
JedisCommands | 抽象面向客户端操作的Redis命令;提供String类型的key,value |
BinaryJedis | 实现BinaryJedisCommands接口,并将实际操作委托给Client |
Jedis | 实现JedisCommands接口,并将操作委托给Client |
Commands | 抽象Redis操作接口,提供String类型的key,value操作;被Jedis调用 |
Connection | 抽象了Redis连接;包括host,port,pass,socket,inputstream,outputstream,protocol 完成与Redis服务器的通信 |
Protocol | 抽象了Redis协议处理 |
BinaryClient | 继承Connection类,封装了基于Byte[]的key,value操作 |
Client | 继承BinaryClient同时实现了Commands,对上层提供基于String类型的操作 |
参考:
http://yychao.iteye.com/blog/1751583