添加Jedis依赖

我们可以使用以下三种方式来添加Jedis依赖。

1、下载jar文件

从http://search.maven.org/下载最近的jedis包Apache Commons Pool 2 2.0依赖包。

2、从源码中构建

以下方式会构建最新的Jedis版本。

首先、克隆GitHub项目

很简单,在命令行输入git clone git://github.com/xetorthio/jedis.git命令即可。

然后、使用maven构建项目

在使用maven打包之前,需要先通过单元测试,我们可以运行make package命令完成单元测试和打包工作。

3、配置maven依赖

Jedis通过Sonatype,被发布为一个Maven依赖,我们可以在pom.xml文件中添加以下xml片段来配置Jedis依赖

<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.8.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>

添加完后,在工程的maven依赖库中可以看到以下两个jar文件:

基本使用示例

在多线程环境中使用Jedis

你不应该在不同的线程中使用同一个Jedis对象实例,否则会遇到各种奇怪的错误。

同样的,针对每个线程都创建一个Jedis实例也不是很合适,因为这意味着会有许多sockets和connections,也会造成奇怪的错误。

一个Jedis实例存在线程安全问题,为了避免这个问题,我们应该使用Jedis池(JedisPool),它是线程安全的。使用JedisPool,我们不仅可以避免那些奇怪的错误,还能取得良好的性能。

可以使用以下代码片段初始化一个JedisPool:

JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");

JedisPoolConfig对象包含了一些默认的连接池配置,我们可以通过查看其构造方法了解其具体默认配置信息,如下代码:

  public JedisPoolConfig() {
// defaults to make your life with connection pool easier :)
setTestWhileIdle(true);
setMinEvictableIdleTimeMillis(60000);
setTimeBetweenEvictionRunsMillis(30000);
setNumTestsPerEvictionRun(-1);
}

另外,JedisPool是基于Commons Pool 2的,所以我们也可以了解一下Commons Pool的配置,详见http://commons.apache.org/proper/commons-pool/apidocs/org/apache/commons/pool2/impl/GenericObjectPoolConfig.html。

下面给出一个完整的例子,注意要先启动redis服务端:

package cn.edu.hdu.jedisdemo;

import java.util.Set;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig; public class App {
public static void main(String[] args) {
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
// / Jedis implements Closable. Hence, the jedis instance will be
// auto-closed after the last statement.
try (Jedis jedis = pool.getResource()) {
// / ... do stuff here ... for example
jedis.set("foo", "bar");
String foobar = jedis.get("foo");
jedis.zadd("sose", 0, "car");
jedis.zadd("sose", 0, "bike");
Set<String> sose = jedis.zrange("sose", 0, -1);
System.out.println(foobar);
System.out.println(sose);
}
// / ... when closing your application:
pool.close();
}
}

如果你的JAVA版本不支持try-with-resource语法,我们可以使用Jedis.close()

Jedis jedis = null;
try {
jedis = pool.getResource();
/// ... do stuff here ... for example
jedis.set("foo", "bar");
String foobar = jedis.get("foo");
jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike");
Set<String> sose = jedis.zrange("sose", 0, -1);
} finally {
if (jedis != null) {
jedis.close();
}
}
/// ... when closing your application:
pool.destroy();

主从配置

主服务器负责接收写数据请求,并且将数据改变复制给从服务器,来保持数据一致性。

从服务器(不一定是必须的)负责接受读数据请求,来减轻主服务器的压力。

主从同步的过程

建立主从关系后,slave 会建立和 master 的连接,然后发送 sync 命令。master会启动一个后台进程,将数据库快照保存到文件中,同时master主进程开始收集写命令并缓存起来。当后台完成写文件后,master服务器会将快照文件发给slave服务器,slave服务器会将快照文件恢复到slave的内存数据库上。完成快照恢复后,master将缓存的写命令转发给slave,slave更新内存数据库。然后,后续master的写命令会通过开始建立的连接发送给slave来完成数据同步。

主从关系的特点

master服务器下面可以有多个slave服务器,slave服务器下面也可以有多个slave服务器,可以形成树状结构

主从复制不会阻塞master服务器,但会阻塞slave服务器

启用主从关系

我们可以通过以下两种方式启用主从关系:

1、通过各个redis服务器的配置文件来配置主从关系

slaveof  192.168.1.35 6379  # 指定master主服务器的ip和端口

优缺点:简单,但是配置文件是在服务器启动时加载的,所以服务器启动后就不能在线修改了。

2、通过调用slaveOf方法,传入ip地址和端口号,

jedis.slaveOf("localhost", 6379);  //  if the master is on the same PC which runs your code
jedis.slaveOf("192.168.1.35", 6379);

优点:可以在线修改redis服务器的主从关系

关闭主从关系,提升一个从服务器为主服务器

当一个主服务器宕机的时候,我们希望能将一个从服务器升级为主服务器。

为此,我们需要先关闭原先的主从关系,然后(假定我们有多个从服务器),将其余从服务器配置到新的主服务器上。

slave1jedis.slaveofNoOne();    //取消主服务器关联,自己成为主服务器
slave2jedis.slaveof("192.168.1.36", 6379); //指定主服务器的ip和端口

参考资料:

https://github.com/xetorthio/jedis/wiki

http://www.tuicool.com/articles/Uruyemf

Redis客户端开发包:Jedis学习-入门的更多相关文章

  1. Redis客户端开发包:Jedis学习-高级应用

    事务 Jedis中事务的写法是将redis操作写在事物代码块中,如下所示,multi与exec之间为具体的事务. jedis.watch (key1, key2, ...); Transaction ...

  2. Tedis:淘宝的Redis的Java客户端开发包

    Tedis:淘宝的Redis的Java客户端开发包   http://www.open-open.com/lib/view/open1389880631976.html   Tedis Tedis是另 ...

  3. WebDav的java客户端开发包:Jackrabbit

    上一篇帖子“WebDav的java客户端开发包:sardine”中说到,对于开发WebDav客户端 sardine是一个很好的选择,但sardine并未实现WevDav的全部规范,所以我又试了试 ap ...

  4. Redis客户端操作之Jedis

      在前面的文章给大家详细的介绍了Redis各种知识点,本文主要给大家介绍下java程序怎么操作Redis数据. Redis之集群环境搭建   Redis官网中提供了各种语言的客户端,使用起来很方便, ...

  5. Java开发包Jedis

    Jedis: http://www.oschina.net/p/jedis (Redis的官方首选Java开发包) <!--Redis --> <dependency> < ...

  6. WebDav的java客户端开发包:sardine

    最近需要对WebDav服务器进行操作,查找了一下,基于java的开发包主要有这几个: slide Jackrabbit sardine webdavclient4j 其中slide是apache的一个 ...

  7. Redis客户端API操作 Jedis详解

    redis是一个著名的key-value存储系统,也是nosql中的最常见的一种.其实,个人认为,redis最强大的地方不在于其存储,而在于其强大的缓存作用. 我们可以把它想象成一个巨大的(多借点集群 ...

  8. Redis客户端——Jedis的使用

    本文介绍基于Java语言的Redis客户端——Jedis的使用,包括Jedis简介.获取Jedis.Jedis直连.Jedis连接池以及二者的对比的选择. Jedis简介 Jedis 是 Redis  ...

  9. 深入剖析Redis客户端Jedis的特性和原理

    一.开篇 Redis作为目前通用的缓存选型,因其高性能而倍受欢迎.Redis的2.x版本仅支持单机模式,从3.0版本开始引入集群模式. Redis的Java生态的客户端当中包含Jedis.Rediss ...

随机推荐

  1. js中局部变量必须用var去声明

    js中的变量与其他的脚本语言都是很不一样的,在function中你如果不用var 声明一个变量,那么这个变量将在全局可见,也就相当于创建了全局变量.所以在function中声明变量尽量都是用var来声 ...

  2. 自己实现简单Web服务器,支持GET POST请求

    最近项目上遇到一个需求,最后想到的解决方案是自己实现一个web服务器去处理请求,然后再将信息发送到另外一个程序.然后返回处理之后的结果呈现出来. 现在我就来分享一下如何实现的. 通过.NET 为我们提 ...

  3. marquee标签滚动效果

    <marquee></marquee>标签,默认从最右侧往左滚动: direction:设置滚动的方向: height:设置标签高度, width:设置标签宽度: behavi ...

  4. nginx 在ubuntu 上的启动,停止,重启

    vi 显示行号 :set num 在开始玩nginx之前,得先安装nginx,可以参考 <ubuntu15.10_x64 安装 nginx>   启动 sudo /usr/local/ng ...

  5. Scroll Depth – 衡量页面滚动的 Google 分析插件

    Scroll Depth 是一个小型的 Google Analytics(谷歌分析)插件,可以让你衡量用户在页面上滚动了多远.它可以监控 25%.50%.75% 和 100% 四个滚动点,并发送谷歌分 ...

  6. React入门--------组件的生命周期

    Mounting/组件挂载相关: componentWillMount componentDidMount Updating/组件更新相关: componentWillReceiveProps sho ...

  7. JScript中的条件注释详解(转载自网络)

    JScript中的条件注释详解-转载 这篇文章主要介绍了JScript中的条件注释详解,本文讲解了@cc_on.@if.@set.@_win32.@_win16.@_mac等条件注释语句及可用于条件编 ...

  8. javascript 对象初探(二)--- 返回对象的函数

    除了使用new操作符调用构造函数以外,我们也可以抛开new操作符,只用一般函数来创建对象,这样就能执行某些预备工作,并已对象为返回值的函数.. function her(){ return { nam ...

  9. JavaScript 数据类型判断

    JavaScript 的数据类型分为两类:原始类型(基本类型)和对象类型(引用类型).原始类型包括数字.字符串和布尔值,另外有两个特殊的原始值:null 和 undefined,除此之外的都是对象.对 ...

  10. 总结CSS3新特性(Animation篇)

    动画(Animation),是CSS3的亮点.//之一 通过animation属性指定@keyframe来完成关键帧动画; @keyframe用法: @keyframes name { 0% { to ...