• 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

  • 相关阅读:
    Oracle 按一行里某个字段里的值分割成多行进行展示
    Property or method "openPageOffice" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by
    SpringBoot 项目启动 Failed to convert value of type 'java.lang.String' to required type 'cn.com.goldenwater.dcproj.dao.TacPageOfficePblmListDao';
    Maven 设置阿里镜像
    JS 日期格式化,留作参考
    JS 过滤数组里对象的某个属性
    原生JS实现简单富文本编辑器2
    Chrome控制台使用详解
    android权限(permission)大全
    不借助第三方网站四步实现手机网站转安卓APP
  • 原文地址:https://www.cnblogs.com/chenpi/p/5680358.html
Copyright © 2020-2023  润新知