jedis基本介绍

在多线程下使用Jedisredis

在不一样的线程中使用相同的Jedis实例会发生奇怪的错误。可是建立太多的实现也很差由于这意味着会创建不少sokcet链接,也会致使奇怪的错误 发生。单一Jedis实例不是线程安全的。为了不这些问题,可使用JedisPool, JedisPool是一个线程安全的网络链接池。能够用JedisPool建立一些可靠Jedis实例,能够从池中拿到Jedis的实例。这种方式能够解 决那些问题而且会实现高效的性能.安全

初始化JedisPool 网络

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

能够以静态的方式处理以上代码,它是线程安全的.多线程

JedisPoolConfig包含了许多有用的redis指定的链接池的默认参数。好比,若是一个链接300秒内没有任何的返回Jedis将关闭这个链接.性能

能够这样使用线程

01 Jedis jedis = pool.getResource();
02 try {
03   //随便作一些对于redis的操做
04   jedis.set("foo", "bar");
05   String foobar = jedis.get("foo");
06   jedis.zadd("sose", 0, "car"); jedis.zadd("sose", 0, "bike");
07   Set<String> sose = jedis.zrange("sose", 0, -1);
08 } finally {
09   //这里很重要,一旦拿到的jedis实例使用完毕,必需要返还给池中
10   pool.returnResource(jedis);
11 }
12 //程序关闭时,须要调用关闭方法
13 pool.destroy();

设置主/从分布code

启用同步复制server

Redis主要为了主/从分布而构建。这意味着"write"请求必需要指向"master", "master"会同步复制改变的内容到"slave". "read"请求能够(不是必须的)被指向"slave",缓解"master"的读写压力.get

能够按如下的步骤使用"master". 为了启用同步复制,有两个方式去告诉"slave"将"slaveOf"到一个给定的"master":同步

1.在redis server的config文件(redis.conf)指明

2.在拿到的jedis实例中调用"slaveOf"方法并指定IP和端口

1 jedis.slaveOf("192.168.1.35", 6379);

注意:"slave"也是一个redis server,也能够接收"write"请求并不会报错,可是改变不会被同步复制,因此若是弄反了jedis的实例则一些操做会被覆盖.

禁用同步复制/master失败后,提高slave

若是"master"down掉,能够提高"slave"成为新的"master".首先试着禁用同步复制离线的"master",若是有几个"slave",启用同步复制其他的"slave"到新的"master".

1 slave1jedis.slaveofNoOne();
2 slave2jedis.slaveOf("192.168.1.36", 6379);
相关文章
相关标签/搜索