redis学习笔记之十七:Redis的Java客户端

n Redis官方推荐的Java客户端是jedis
网址:https://github.com/xetorthio/jedis
n 构建开发环境,在Maven中添加

redis.clients
jedis
2.7.2

n 连接池
1:jedis的连接池基于apach的commons-pool,要确保添加了相应的包
2:配置连接池,一般使用JedisPoolConfig,常见的设置:
(1)maxTotal:最大实例数,-1表示不限制,默认8
(2)maxIdle/minIdle:最大/小空闲实例数,默认8/0
(3)whenExhaustedAction:当池中的实例被分配完时,要采取的操作,默认有三种:
WHEN_EXHAUSTED_FAIL:直接抛出NoSuchElementException
WHEN_EXHAUSTED_BLOCK:阻塞住,达到maxWaitMillis时抛出例外,默认选项
WHEN_EXHAUSTED_GROW:新建一个实例,也就说设置的maxTotal无用
(4)maxWaitMillis:获取一个实例时,最大的等待毫秒数,如果超时抛出JedisConnectionException,默
认-1,表示永远等待
(5)testOnBorrow:在获取实例时,是否验证对象有效,如果无效,会重新选择一个,默认false
(6)testOnReturn:在归还连接给池时,是否验证对象有效性,默认false
(7)testWhileIdle:是否对空闲实例验证对象有效性,失效的对象会被删除,默认false,仅在
timeBetweenEvictionRunsMillis设置为正值时有效
(8)timeBetweenEvictionRunsMillis:空闲实例验证,两次扫描之间要sleep的毫秒数;默认是-1
(9)numTestsPerEvictionRun:空闲实例验证,每次扫描的最多的对象数,默认是3,仅在
timeBetweenEvictionRunsMillis设置为正值时有效
(10)minEvictableIdleTimeMillis:一个实例至少停留在idle状态的最短时间,然后才能被空闲实例验证
扫描并驱逐;默认30分钟,仅在timeBetweenEvictionRunsMillis设置为正值时有效
(11)lifo:设置采用last in first out队列,默认true
(7)testWhileIdle:是否对空闲实例验证对象有效性,失效的对象会被删除,默认false,仅在
timeBetweenEvictionRunsMillis设置为正值时有效
(8)timeBetweenEvictionRunsMillis:空闲实例验证,两次扫描之间要sleep的毫秒数;默认是-1
(9)numTestsPerEvictionRun:空闲实例验证,每次扫描的最多的对象数,默认是3,仅在
timeBetweenEvictionRunsMillis设置为正值时有效
(10)minEvictableIdleTimeMillis:一个实例至少停留在idle状态的最短时间,然后才能被空闲实例验证
扫描并驱逐;默认30分钟,仅在timeBetweenEvictionRunsMillis设置为正值时有效
(11)lifo:设置采用last in first out队列,默认true
(7)testWhileIdle:是否对空闲实例验证对象有效性,失效的对象会被删除,默认false,仅在
timeBetweenEvictionRunsMillis设置为正值时有效
(8)timeBetweenEvictionRunsMillis:空闲实例验证,两次扫描之间要sleep的毫秒数;默认是-1
(9)numTestsPerEvictionRun:空闲实例验证,每次扫描的最多的对象数,默认是3,仅在
timeBetweenEvictionRunsMillis设置为正值时有效
(10)minEvictableIdleTimeMillis:一个实例至少停留在idle状态的最短时间,然后才能被空闲实例验证
扫描并驱逐;默认30分钟,仅在timeBetweenEvictionRunsMillis设置为正值时有效
(11)lifo:设置采用last in first out队列,默认true
n 连接集群
以前的老版本Redis不支持集群的功能,因此是在客户端采用一致性Hash来对数据进行分片,
jedis中对应的是SharedJedis;既然现在Redis已经支持集群了,就先看新的集群的写法:
Set jedisClusterNodes = new HashSet();
//Jedis Cluster will attempt to discover cluster nodes automatically
jedisClusterNodes.add(new HostAndPort("127.0.0.1", 7379));
JedisCluster jc = new JedisCluster(jedisClusterNodes);
jc.set("foo", "bar");
String value = jc.get("foo");
 

n 客户端分片的方式
1:定义一个List,里面包含多个JedisShardInfo
2:创建ShardedJedis对象,然后就可以通过这个对象操作命令了,操作完后可以disconnect
3:可以通过getShardInfo(key)方法来获取使用的分片信息
4:可以通过设置key tag pattern来保证key 位于同一个shard
5:分片的连接池对象是:ShardJedisPool,配置对象仍然是JedisPoolConfig,例如:
ShardJedisPool pool =new ShardedJedisPool(jedisPoolConfig, jedsInfoList,
Hashing.MURMUR_HASH,Sharded.DEFAULT_KEY_TAG_PATTERN);
 

你可能感兴趣的:(架构,redis)