zoukankan      html  css  js  c++  java
  • Redis客户端开发包:Jedis学习-入门

    添加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

  • 相关阅读:
    MP3/4维修全攻略
    看图学维修mp3之电源篇65Z8\65Z5
    CSS按钮样式之button标签与input type=button的区别详解
    【原】PNG的使用技巧
    【原】[webkit移动开发笔记]之禁止触发系统默认菜单
    【原】使用iScroll.js解决ios4下不支持position:fixed的问题
    【原】YUI压缩与CSS media queries下的bug
    【翻译】Building a Simple Blog Engine with ASP.NET MVC and LINQ Part 2
    【翻译】Building a Simple Blog Engine with ASP.NET MVC and LINQ Part 4
    .NET技术书籍推荐
  • 原文地址:https://www.cnblogs.com/chenpi/p/5680358.html
Copyright © 2011-2022 走看看