spring session和redis集群打造分布式会话使用方案及错误解决
2016-11-22 00:00
1316 查看
maven依赖
spring配置文件中只需配置 RedisHttpSessionConfiguration
他会去自动寻找JedisConnectionFactory,所以你还需要配置
JedisConnectionFactory 用集群还是单机还是主从随你了,这里使用三主三从的集群方式。
最后的最后还需要去web.xml中配置上:注意要放在所有filter的最前面
然后开心的让他跑起来。
等待你的将会是——————————
在测试阶段集群都能很好的运行,然而这里却报错了。
好吧百度谷歌弄完了,还是没解决。谈到redis的notify-keyspace-events 需要配置,但是,然并卵。。。,这里困了我很久.后来发现是因为集群配置出问题,估计是在增加节点删除节点这里,没有清理干净。导致读取集群信息的时候读到一个未知的节点,连接自然是失败的,所有就报上面的错误。但是不影响数据的相关操作。
最后的解决方案献上:
1。spring的配置文件中加上下面这句,让spring session不在管集群节点信息状况,只管存取就行了。
2.集群重新创建。。。如果你之前有做过增删改节点信息的,很有可能哪里处理不对,导致有残余配置。
<!-- 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.集群重新创建。。。如果你之前有做过增删改节点信息的,很有可能哪里处理不对,导致有残余配置。
相关文章推荐
- 使用redis实现分布式锁,可以解决集群中需要单例的情况
- redis3.2.5 分布式集群安装+错误解决过程
- 分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型
- 在Spring Boot中使用Spring Session解决分布式会话共享问题
- 架构分布式____Redis集群架构各种方案分析
- 只有在配置文件或 Page 指令中将 enableSessionState 设置为 true 时,才能使用会话状态等错误解决方法(原)
- 使用redis集群+tomcat缓存共享下session丢失问题产生原因以及解决
- 使用Docker在本地搭建Hadoop分布式集群 的错误总结(持续更新)
- redis 创建集群时 出现的错误解决方式
- 170222、使用Spring Session和Redis解决分布式Session跨域共享问题
- 分布式缓存集群方案特性使用场景(Memcache/Redis(Twemproxy/Codis/Redis-cluster))优缺点对比及选型
- 在使用代码连接redis集群时报:no reachable node in cluster,解决办法
- 解决WEB集群session同步的方案,Redis内存缓存
- 分布式架构学习之:032--使用Redis3.0集群实现Tomcat集群的Session共享
- redis-4.0.0集群操作步骤及错误解决
- 架构分布式____Redis集群架构(sentinel哨兵模式集群方案)
- nginx集群使用session粘连Tomcat故障后的会话转移解决策略
- Net分布式系统之五:C#使用Redis集群缓存
- 分布式架构学习之:使用Redis3.0集群实现Tomcat集群的Session共享
- 使用Spring Session和Redis解决分布式Session跨域共享问题