您的位置:首页 > 数据库 > Redis

spring session和redis集群打造分布式会话使用方案及错误解决

2016-11-22 00:00 1316 查看
maven依赖

<!-- tag::spring & spring session[] -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<type>pom</type>
<version>1.2.1.RELEASE</version>
</dependency>

spring配置文件中只需配置 RedisHttpSessionConfiguration

<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
<property name="maxInactiveIntervalInSeconds" value="1800"/>
</bean>

他会去自动寻找JedisConnectionFactory,所以你还需要配置

<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
destroy-method="destroy" p:usePool="true">
<constructor-arg name="clusterConfig" ref="clusterConfiguration"/>
<constructor-arg name="poolConfig" ref="jedisPoolConfig"/>
</bean>

JedisConnectionFactory 用集群还是单机还是主从随你了,这里使用三主三从的集群方式。

最后的最后还需要去web.xml中配置上:注意要放在所有filter的最前面

<!-- delegatingFilterProxy -->
<filter>
<filter-name>springSessionRepositoryFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSessionRepositoryFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

然后开心的让他跑起来。

等待你的将会是——————————

Caused by: org.springframework.data.redis.ClusterStateFailureException: Could not retrieve cluster information. CLUSTER NODES returned with error.
- 192.168.0.201:6379 failed: Hostname must not be empty or null.
- 192.168.0.202:7000 failed: Hostname must not be empty or null.
- 192.168.0.203:7000 failed: Hostname must not be empty or null.
- 192.168.0.202:6379 failed: Hostname must not be empty or null.
- 192.168.0.203:6379 failed: Hostname must not be empty or null.
- 192.168.0.201:7000 failed: Hostname must not be empty or null.
at org.springframework.data.redis.connection.jedis.JedisClusterConnection$JedisClusterTopologyProvider.getTopology(JedisClusterConnection.java:3910)
at org.springframework.data.redis.connection.ClusterCommandExecutor.getClusterTopology(ClusterCommandExecutor.java:349)
at org.springframework.data.redis.connection.ClusterCommandExecutor.executeCommandOnAllNodes(ClusterCommandExecutor.java:188)
at org.springframework.data.redis.connection.jedis.JedisClusterConnection.getConfig(JedisClusterConnection.java:2975)

在测试阶段集群都能很好的运行,然而这里却报错了。

好吧百度谷歌弄完了,还是没解决。谈到redis的notify-keyspace-events 需要配置,但是,然并卵。。。,这里困了我很久.后来发现是因为集群配置出问题,估计是在增加节点删除节点这里,没有清理干净。导致读取集群信息的时候读到一个未知的节点,连接自然是失败的,所有就报上面的错误。但是不影响数据的相关操作。

最后的解决方案献上:

1。spring的配置文件中加上下面这句,让spring session不在管集群节点信息状况,只管存取就行了。

<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>

2.集群重新创建。。。如果你之前有做过增删改节点信息的,很有可能哪里处理不对,导致有残余配置。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  springsession redis
相关文章推荐