客户端分片使用ShardedJedisPool,设置DB和超时时间
2015-08-18 14:47
996 查看
在使用jedis(2.7.2)做redis 客户端Sharding的时候,发现ShardedJedisPool里没有设置DB和超时时间的地方,看了JedisShardInfo的源码,里面的构造方法要么只能设置超时时间,要么只能设置DB,没有同时设置这两个的方法。
看起来只能自己继承JedisShardInfo来实现以上的功能,代码也比较简单
代码如下
然后在spring配置文件中使用自定义的JedisShardInfo,如下
properties文件中配置如下
这样在代码中直接使用
@Resource(name = "shardedJedisPool")
private ShardedJedisPool pool;
即可使用了。
public JedisShardInfo(String host) { super(Sharded.DEFAULT_WEIGHT); URI uri = URI.create(host); if (JedisURIHelper.isValid(uri)) { this.host = uri.getHost(); this.port = uri.getPort(); this.password = JedisURIHelper.getPassword(uri); this.db = JedisURIHelper.getDBIndex(uri); } else { this.host = host; this.port = Protocol.DEFAULT_PORT; } }
public JedisShardInfo(String host, int port, int connectionTimeout, int soTimeout, int weight) { super(weight); this.host = host; this.port = port; this.connectionTimeout = connectionTimeout; this.soTimeout = soTimeout; }
看起来只能自己继承JedisShardInfo来实现以上的功能,代码也比较简单
代码如下
/** * 重写JedisShardInfo * */ public class MyJedisShardInfo extends JedisShardInfo{ public MyJedisShardInfo(String host, int connectionTimeout, int soTimeout) { super(host); // 设置超时时间 this.setConnectionTimeout(connectionTimeout); this.setSoTimeout(soTimeout); } }
然后在spring配置文件中使用自定义的JedisShardInfo,如下
<!-- redis sharding --> <bean id="shardedJedisPool" class="redis.clients.jedis.ShardedJedisPool"> <constructor-arg index="0" ref="jedisPoolConfig" /> <constructor-arg index="1"> <list> <bean name="redis1" class="com.my.cache.MyJedisShardInfo"> <constructor-arg index="0" value="${redis.slaver1.host}" /> <constructor-arg index="1" value="${redis.client.connectionTimeout}" /> <constructor-arg index="2" value="${redis.client.soTimeout}" /> </bean> <bean name="redis2" class="com.my.cache.MyJedisShardInfo"> <constructor-arg index="0" value="${redis.slaver2.host}" /> <constructor-arg index="1" value="${redis.client.connectionTimeout}" /> <constructor-arg index="2" value="${redis.client.soTimeout}" /> </bean> </list> </constructor-arg> </bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig"> <property name="maxTotal" value="${redis.pool.maxTotal}" /> <property name="maxIdle" value="${redis.pool.maxIdle}" /> <property name="timeBetweenEvictionRunsMillis" value="${redis.pool.timeBetweenEvictionRunsMillis}" /> <property name="minEvictableIdleTimeMillis" value="${redis.pool.minEvictableIdleTimeMillis}" /> <property name="softMinEvictableIdleTimeMillis" value="${redis.pool.softMinEvictableIdleTimeMillis}" /> <property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}" /> <property name="testOnBorrow" value="${redis.pool.testOnBorrow}" /> <property name="testWhileIdle" value="${redis.pool.testWhileIdle}" /> <property name="testOnReturn" value="${redis.pool.testOnReturn}" /> <property name="blockWhenExhausted" value="${redis.pool.blockWhenExhausted}" /> </bean>
properties文件中配置如下
#redis cluster #Scheme://username:password@IP:PORT/dbindex redis.slaver1.host=http://10.10.10.134:6379/0 redis.slaver2.host=http://10.10.10.134:6380/0 redis.client.connectionTimeout=2000 redis.client.soTimeout=2000 #redis pool redis.pool.maxTotal=100 redis.pool.maxIdle=30 redis.pool.timeBetweenEvictionRunsMillis=30000 redis.pool.minEvictableIdleTimeMillis=1800000 redis.pool.softMinEvictableIdleTimeMillis=1800000 redis.pool.maxWaitMillis=1500 redis.pool.testOnBorrow=true redis.pool.testWhileIdle=false redis.pool.testOnReturn=false redis.pool.blockWhenExhausted=false
这样在代码中直接使用
@Resource(name = "shardedJedisPool")
private ShardedJedisPool pool;
即可使用了。
相关文章推荐
- redis安装问题小结
- Redis偶发连接失败案例实战记录
- Redis中实现查找某个值的范围
- Redis和Memcached的区别详解
- 分割超大Redis数据库例子
- Redis总结笔记(一):安装和常用命令
- Redis sort 排序命令详解
- redis中修改配置文件中的端口号 密码方法
- 在Ruby on Rails上使用Redis Store的方法
- Redis和Memcache的区别总结
- 在Node.js应用中使用Redis的方法简介
- Redis服务器的启动过程分析
- web 应用中常用的各种 cache详解
- 利用yum安装Redis的方法详解
- 从MySQL到Redis的简单数据库迁移方法
- 为啥懒 Redis 是更好的 Redis
- 在Redis数据库中实现分布式速率限制的方法
- redis2.8配置文件中文翻译版
- mysql sharding(碎片)介绍
- 详解Redis使用认证密码登录