首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

在多线程下使用Jedis-设置主/从散布

2013-12-28 
在多线程下使用Jedis-设置主/从分布在多线程下使用Jedis在不同的线程中使用相同的Jedis实例会发生奇怪的错

在多线程下使用Jedis-设置主/从分布

在多线程下使用Jedis

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

初始化JedisPool?

?

[java]?view plaincopy?
  1. JedisPool?pool?=?new?JedisPool(new?JedisPoolConfig(),?"localhost");??

?

?

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

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

可以这样使用

[java]?view plaincopy?
  1. Jedis?jedis?=?pool.getResource();??
  2. try?{??
  3. ??//随便做一些对于redis的操作??
  4. ??jedis.set("foo",?"bar");??
  5. ??String?foobar?=?jedis.get("foo");??
  6. ??jedis.zadd("sose",?0,?"car");?jedis.zadd("sose",?0,?"bike");??
  7. ??Set<String>?sose?=?jedis.zrange("sose",?0,?-1);??
  8. }?finally?{??
  9. ??//这里很重要,一旦拿到的jedis实例使用完毕,必须要返还给池中??
  10. ??pool.returnResource(jedis);??
  11. }??
  12. //程序关闭时,需要调用关闭方法??
  13. pool.destroy();??

?

设置主/从分布

启用同步复制

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

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

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

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

[java]?view plaincopy?
  1. jedis.slaveOf("192.168.1.35",?6379);??

?

意:"slave"也是一个redis server,也可以接收"write"请求并不会报错,但是改变不会被同步复制,所以如果弄反了jedis的实例则一些操作会被覆盖.

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

如果"master"down掉,可以提升"slave"成为新的"master".首先试着禁用同步复制离线的"master",如果有几个"slave",启用同步复制其余的"slave"到新的"master".

[java]?view plaincopy?
  1. slave1jedis.slaveofNoOne();??
  2. slave2jedis.slaveOf("192.168.1.36",?6379);??

热点排行