spring data redis 配置

参考:http://www.linuxidc.com/Linux/2015-04/116798.htm

纠结了半天,最终还是放弃使用spring  data redis。因为它好像是不支持读写分离的。我想要一主多从,写在master上,读在slave上(我还配置了sentinel,用作主备切换),但是就我从spring官网上看的例子以及网络上找到的资料来看,spring  data redis目前(1.7.0.RELEASE)及以前的版本并不支持读写分离。

不管如何,我先把配置记下吧。如果我的理解有误,还请大家批评指出。

我配置的一主多从如下,一个master,两个slave,三个sentinel,下方的数字是它们的端口号,redis是windows版(版本:3.0.501),所有实例都运行在一台机器上。



1、maven

这里由于版本兼容问题,使用的是1.6.0.RELEASE版

<dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-redis</artifactId>
        <version>1.6.0.RELEASE</version>
    </dependency>
  
    <dependency>
	    <groupId>redis.clients</groupId>
	    <artifactId>jedis</artifactId>
	    <version>2.8.0</version>
    </dependency>

2、配置文件

#2、redis配置相关
redis.master.host=127.0.0.1
redis.master.port=9379
redis.slave1.host=127.0.0.1
redis.slave1.port=9380
redis.slave2.host=127.0.0.1
redis.slave2.port=9381
redis.sentinel1.host=127.0.0.1
redis.sentinel1.port=29379
redis.sentinel2.host=127.0.0.1
redis.sentinel2.port=29380
redis.sentinel3.host=127.0.0.1
redis.sentinel3.port=29381

#redis连接池配置
#最大分配的对象数
redis.pool.maxActive=3000
#最大能够保持idel状态的对象数
redis.pool.maxIdle=100
#当池内没有返回对象时,最大等待时间
#redis.pool.maxWait=1000
#当调用borrow Object方法时,是否进行有效性检查
redis.pool.testOnBorrow=true
#当调用return Object方法时,是否进行有效性检查
redis.pool.testOnReturn=true

3、spring配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd">
    	
	<bean id="redisSentinelConfiguration" class="org.springframework.data.redis.connection.RedisSentinelConfiguration">
	    <property name="master">
	        <bean class="org.springframework.data.redis.connection.RedisNode">
	            <property name="name" value="mymaster"/>
	            <constructor-arg name="host" value="${redis.master.host}"></constructor-arg>
	            <constructor-arg name="port" value="${redis.master.port}"></constructor-arg>
	        </bean>
	    </property>
	    <property name="sentinels">
	        <set>
	            <bean class="org.springframework.data.redis.connection.RedisNode">
	                <constructor-arg name="host" value="${redis.sentinel1.host}"></constructor-arg>
	                <constructor-arg name="port" value="${redis.sentinel1.port}"></constructor-arg>
	            </bean>
	            <bean class="org.springframework.data.redis.connection.RedisNode">
	                <constructor-arg name="host" value="${redis.sentinel2.host}"></constructor-arg>
	                <constructor-arg name="port" value="${redis.sentinel2.port}"></constructor-arg>
	            </bean>
	            <bean class="org.springframework.data.redis.connection.RedisNode">
	                <constructor-arg name="host" value="${redis.sentinel3.host}"></constructor-arg>
	                <constructor-arg name="port" value="${redis.sentinel3.port}"></constructor-arg>
	            </bean>
	        </set>
	    </property>
	</bean>
	
	<!-- 连接池配置 -->
	<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxTotal" value="${redis.pool.maxActive}" />
		<property name="maxIdle" value="${redis.pool.maxIdle}" />
		<!-- <property name="maxWait" value="${redis.pool.maxWait}" /> -->
		<property name="testOnBorrow" value="${redis.pool.testOnBorrow}" />
		<property name="testOnReturn" value="${redis.pool.testOnReturn}" />
	</bean>
	
	<bean id="jedisConnectionFactory"
	      class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
		<property name="poolConfig" ref="jedisPoolConfig"></property>  
	    <constructor-arg ref="redisSentinelConfiguration"/>
	</bean>

	<bean id="stringRedisTemplate" 
		  class="org.springframework.data.redis.core.StringRedisTemplate" 
		  p:connection-factory-ref="jedisConnectionFactory"/>
  
</beans>

查看JedisConnectionFactory源码发现pool是Pool<Jedis>,而不是Pool<ShardedJedis>。因此我猜目前spring data redis是做不了读写分离的,stringRedisTemplate读写操作都是在master上。


4、其它

sentinel.conf 的最小配置如下:

port 29380
sentinel monitor mymaster 127.0.0.1 9379 2
sentinel down-after-milliseconds mymaster 60000
sentinel config-epoch mymaster 1
sentinel leader-epoch mymaster 1

启动命令:

redis-server sentinel.conf   --sentinel

redis命令及相关资料可以在这个文档查看:http://doc.redisfans.com/

另外,我把本文搭建的redis主从复制的三个文件夹上传到了:http://download.csdn.net/detail/zhutulang/9585010

说明:

1、windows下redis,版本是3.0.501。特意弄了三份,用于搭建一个master和2个slave的主从复制。
2、压缩包下共三个文件,一个master,端口号是9379,一个slave1,端口号是9380,一个slave2,端口号是9381。另外,每个文件夹下各有一个sentinel.conf,用于启动sentinel。启动命令是redis-server sentinel.conf --sentinel
3、redis.conf配置项可参考:http://blog.csdn.net/zhutulang/article/details/51969760
搭建主从复制可参考:http://www.linuxidc.com/Linux/2015-04/116798.htm



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值