您的位置:首页 > 数据库 > Redis

多线程环境中使用redis

2015-08-06 22:20 501 查看
不能在不同的线程中使用同一个实例,因为你将会有奇怪的错误。有时创建多个jedis的实例也不是很好,因为也会发生奇怪的错误。一个jedis实例线程不安全。为了避免上述奇怪的错误,你应该使用jedisPool,它是网络连接线程安全池。你可以使用pool静态的创建几个jedis实例,这种方式可以克服那些奇怪的错误而收获巨大的性能。

为了使用它,初始化一个pool:

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

JedisPoolConfig包含很多有用的Redis-specific默认连接。JedisPool是基于Commons Pool 2,所以你也许想看看Commons Pool's 配置。Please see
http://commons.apache.org/proper/commons-pool/apidocs/org/apache/commons/pool2/impl/GenericObjectPoolConfig.html for more details.

You use it by:

你可以这么使用:
try(Jedis jedis=pool.getResource()){

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);

}

pool.destroy();

如果你不能使用try-with-resource,你可以使用:

Jedis jedis=null;

try{

jedis=pool.getResource();

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();

}

}

pool.destroy();

设置主/从分布

为了保证可复制

redis首选要建立主从分布。这就意味着写请求明确的知道主服务器的地址,

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

disable replication / upon failing master, promote a slave

In case your master goes down, you may want to promote a slave to be the new master. You should first (try to) disable replication of the offline master first, then, in case you have several slaves, enable replication of the remaining slaves to the new master: [code]slave1jedis.slaveofNoOne(); slave2jedis.slaveOf("192.168.1.36", 6379);

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: