Fork me on GitHub

Springsession+redis实现session共享

Springsession+redis实现session共享
为何突然写这个文章,因为我花费了一天的时间才把它配置好,其中遇到的坑,是到目前为止遇到最多的,有人在想现在网上这么多的教程,为啥你这个小菜鸡博主要写这个,因为,原项目中用的缓存用的是memcached,有人说,memcached+tomcat也可以实现缓存共享呀!有能耐,你把这个包给我,我是基本上下遍了CSDN上面的包,没一个能用的,有人说maven,对,我也下了一遍,最后我放弃了。对就是这么任性的放弃了。老子要搞redis,老子要搞两个缓存,我就要高大上的!(心里话:小菜鸡搞不定了,认怂了,只能这么搞了!)。
你想输入的替代文字
首先:准备工具,redis+jar包,包括了windows版本的redis以及连接redis工具
地址:http://download.csdn.net/download/liyu7690/10041003
准备好了:上干货
首先:你要在你的web.xml中写这些,拦截你的请求,存储你的session

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- 配置session共享 注意位置:网上一大堆!自己去看 www.baidu.com 记得搜索-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>这里换成你的配置文件的地址,别就复制过去,啥也不看。</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>

主要的来了,你要配置一个redis.xml文件的名字自己起,最好具有代表性,比如我的。你想输入的替代文字
这样就清晰了!然后,配置文件中写,直接复制了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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:util="http://www.springframework.org/schema/util"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<context:component-scan base-package="org.springframework.web.filter.DelegatingFilterProxy"/>
<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig" p:maxIdle="300" p:maxWaitMillis="1000" p:testOnBorrow="true"></bean>
<!-- 添加RedisHttpSessionConfiguration用于session共享 -->
<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" />
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
p:hostName="你的redisIP"
p:port="你的redis的端口号"
p:password="你的redis设置的密码"
p:poolConfig-ref="poolConfig"
p:usePool="true" p:database="1"
p:timeout="180000" />
<!-- 让Spring Session不再执行config命令 -->
<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
</beans>

注意这里;你想输入的替代文字
对就是这个版本好,一定要比你的Spring版本小,哪怕一致也可以,这个是隐藏的坑这个版本向下兼容,不对上兼容。(坑一)
然后你就可以开始连接了,对吧!如果你的redis安装在本地,那么!没有问题,可以了!如果你的redis在虚拟机或者测试服务器中,你就会发现一个问题。

1
2
3
4
16:45:15,105 ERROR ContextLoader:319 - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'enableRedisKeyspaceNotificationsInitializer' defined in class path resource [org/springframework/session/data/redis/config/annotation/web/http/RedisHttpSessionConfiguration.class]: Invocation of init method failed; nested exception is org.springframework.data.redis.RedisConnectionFailureException: Cannot get Jedis connection; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: Could not get a resource from the pool
居然报错了!为啥,我都配置对了啊!为啥报错啊!我就开始在网上寻找啊!有个博客写的挺好,告诉我配置这个

<!-- 让Spring Session不再执行config命令 -->
<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>

我配置了啊!为啥报错了!还不对,难道是jar包冲突了!不是的!记住,我一直都没有说过一个事情,就是redis的配置与安装,这个才是重点。一般的博客对这个都没有说。
redis安装很简单的:打开网址:https://redis.io/ 然后点击这里你想输入的替代文字 按照下面的操作就可以了!这个是Linux的操作,如果windows的,自己百度,一堆的。注意:==redis默认只允许本地访问,要使redis可以远程访问可以修改redis.conf==
将==bind 127.0.0.1 改成了bind 0.0.0.0。==然后使用工具连接,即可。到此!坑填完了!
你想输入的替代文字
一只努力前行的小菜鸡。

—————未经允许,不可转载—————