redis的sentinel使用以及spring集成方面的问题
现在的情况是这样的:我已经在linux端做好了master以及两个slave的redis,sentinel配置Redis.xml如下配置:<beanid="jedisCo...
现在的情况是这样的:
我已经在linux端做好了master以及两个slave的redis,sentinel配置
Redis.xml如下配置:
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="usePool" value="true"></property>
<property name="hostName" value="192.168.86.5" />
<property name="port" value="6371" />
<property name="password" value="" />
<property name="timeout" value="100000" />
<property name="database" value="0"></property>
<constructor-arg index="0" ref="jedisPoolConfig" />
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="300" />
<property name="maxIdle" value="100" />
<property name="maxWaitMillis" value="1000" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="true" />
</bean>
<bean id="jedisPool" class="redis.clients.jedis.JedisSentinelPool">
<constructor-arg index="0" value="mymaster" />
<constructor-arg index="1">
<set>
<value>192.168.86.5:26370</value>
<value>192.168.86.5:26372</value><!--配置了两个哨兵 -->
</set>
</constructor-arg>
<constructor-arg index="2" ref="jedisPoolConfig" />
</bean>
现在能够正常运行程序,redis能够正常的存入信息。当我断掉master(端口号6371),linux端slave能自动选举出新的master,eclipse也有相应的反应:
十一月 30, 2015 12:03:36 下午 redis.clients.jedis.JedisSentinelPool initPool
信息: Created JedisPool to master at 192.168.86.5:6372
但是程序的redis无法再存取数据了。
经过我单步运行程序:发现已经从数据库中取到了数据,问题是出在将数据放到redis这一步:redisHelper.setUser(sessionUserId, _user);
我猜想是因为redis的6371这个端口断掉后,程序仍然向这个端口请求,所以导致报错。(当我再启动6371后,redis又能存取数据了,虽然已经变成slave,无法再传递数据)
但是带我的老司机想让我实现:当一个master挂掉之后,程序能够在新选出的master中继续存取数据。
我设想了一个方法,<property name="port" value="6371" />将这个端口改成监听,监听变化后的master端口号。我也没看到百度上有人这样做,也不知道redis能不能这样做,甚至也怀疑老司机的想法能不能实现。求各位指点一下,谢谢,感激不尽。 展开
我已经在linux端做好了master以及两个slave的redis,sentinel配置
Redis.xml如下配置:
<bean id="jedisConnectionFactory"
class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="usePool" value="true"></property>
<property name="hostName" value="192.168.86.5" />
<property name="port" value="6371" />
<property name="password" value="" />
<property name="timeout" value="100000" />
<property name="database" value="0"></property>
<constructor-arg index="0" ref="jedisPoolConfig" />
</bean>
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="300" />
<property name="maxIdle" value="100" />
<property name="maxWaitMillis" value="1000" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="true" />
</bean>
<bean id="jedisPool" class="redis.clients.jedis.JedisSentinelPool">
<constructor-arg index="0" value="mymaster" />
<constructor-arg index="1">
<set>
<value>192.168.86.5:26370</value>
<value>192.168.86.5:26372</value><!--配置了两个哨兵 -->
</set>
</constructor-arg>
<constructor-arg index="2" ref="jedisPoolConfig" />
</bean>
现在能够正常运行程序,redis能够正常的存入信息。当我断掉master(端口号6371),linux端slave能自动选举出新的master,eclipse也有相应的反应:
十一月 30, 2015 12:03:36 下午 redis.clients.jedis.JedisSentinelPool initPool
信息: Created JedisPool to master at 192.168.86.5:6372
但是程序的redis无法再存取数据了。
经过我单步运行程序:发现已经从数据库中取到了数据,问题是出在将数据放到redis这一步:redisHelper.setUser(sessionUserId, _user);
我猜想是因为redis的6371这个端口断掉后,程序仍然向这个端口请求,所以导致报错。(当我再启动6371后,redis又能存取数据了,虽然已经变成slave,无法再传递数据)
但是带我的老司机想让我实现:当一个master挂掉之后,程序能够在新选出的master中继续存取数据。
我设想了一个方法,<property name="port" value="6371" />将这个端口改成监听,监听变化后的master端口号。我也没看到百度上有人这样做,也不知道redis能不能这样做,甚至也怀疑老司机的想法能不能实现。求各位指点一下,谢谢,感激不尽。 展开
1个回答
2015-12-01
展开全部
spring-data-redis 中的核心操作类是 RedisTemplate<K, V>
可以看出 key 和 value 都是泛型的,这就涉及到将类型进行序列化的问题了
所就在 RedisTemplate 中还有几个 RedisSerializer~
1)redisConnectionFactory()配置了如何连接Redsi服务器(如何安装Redis,
2)oxmSerializer()是我新增的,用于定义一个基于Jaxb2Marshaller的OxmSerializer Bean(后面将会用到)
可以看出 key 和 value 都是泛型的,这就涉及到将类型进行序列化的问题了
所就在 RedisTemplate 中还有几个 RedisSerializer~
1)redisConnectionFactory()配置了如何连接Redsi服务器(如何安装Redis,
2)oxmSerializer()是我新增的,用于定义一个基于Jaxb2Marshaller的OxmSerializer Bean(后面将会用到)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询