本文主要是介绍jedis 基本使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
环境
java:1.7
jedis: 2.9
基本使用
先去中央仓库把jedis
jar包下载下来。
在多线程环境中使用jedis
你不应该在多线程中使用同一个jedis
实例,因为你将会遇到奇怪的问题。
然后有时创建大量的jedis
实例也是不对的,因为其意味着大量的socket
连接,其也会导致产生奇怪的问题。单个jedis
实例是非线程安全的。为了避免这些问题,你应该使用JedisPool
,其是线程安全的网络连接池。你可以使用这个池去创建几个可靠的jedis
实例,当使用完成后归还到池子中。
可以使用下列代码,初始化一个池子:
JedisPool pool = new JedisPool(new JedisPoolConfig(), "localhost");
你可以将该池静态存储在某个地方,因为它是线程安全的。
JedisPoolConfig 包含许多Redis-specific
连接池有用的默认值。JedisPool
是基于Commons Pool 2
,你可以参考:
http://commons.apache.org/proper/commons-pool/apidocs/org/apache/commons/pool2/impl/GenericObjectPoolConfig.html 来查看Commons Pool
的配置。
使用方法:
/// Jedis implements Closeable. Hence, the jedis instance will be auto-closed after the last statement.
try (Jedis jedis = pool.getResource()) {/// ... do stuff here ... for examplejedis.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);
}
/// ... when closing your application:
pool.destroy();
注意
上面用到了
jdk1.7
中的新语法:try with resource
;
这样的好处就是在括号里面的流或者资源,会自动关闭,不需要像下面例子那样在finally
里面关闭。
要使用这个特性需要实现Closeable
接口
如果你不能使用try-with-resource
,你可以使用Jedis.close()
。
Jedis jedis = null;
try {jedis = pool.getResource();/// ... do stuff here ... for examplejedis.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();
如果jedis
是来自于池子里的,只要确定发生了JedisConnectionException
就会由合适的方法将其归还到池子中。如果jedis
并不是来自于池子中,(发送JedisConnectionException)它将会被断开连接并关闭。
设置主从分配
启用副本
redis主要用于主从的配置。这意味着写请求必须明确发送到主节点,并将更改拷贝到从节点(也是redis
服务器)。读请求可以发送到从节点,这样就减少了主节点的压力。
上面的示例使用的就是master
,为了启用副本,这里有两种方式来告诉从节点其归属哪个主节点。
- 在
redis
服务器的配置文件中的相应部分指定 - 在给定的
jedis
实例上,调用savleOf
方法并传递IP
和port
两个参数。
jedis.slaveOf("localhost", 6379); // if the master is on the same PC which runs your code
jedis.slaveOf("192.168.1.35", 6379);
注意
从
redis
2.6版本开始,子节点默认是只读的,所以写请求将会导致错误。
如果你更改了该设置,那么这些从节点就会像正常的redis
服务器一样,并且可以接收写请求,而不会发生错误。但是这些更改不会复制,如果你混合你的jedis
实例,那么这些更改将会有被覆盖的风险。
disable replication / upon failing master, promote a slave
如果你的主节点坏了,你可能想把某个从节点提升为新的主节点。
你应该首先(尝试)禁止离线主节点复制,接着,如果你有多个从服务器,可以从剩余的从服务器中选一个作为新节点。
slave1jedis.slaveofNoOne();
slave2jedis.slaveof("192.168.1.36", 6379);
参考地址:
https://github.com/xetorthio/jedis/wiki/Getting-started
这篇关于jedis 基本使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!