ssm框架整合redis,spring-session实现分布式session分离

ssm框架整合参照上一篇:https://www.cnblogs.com/guyihan/p/15516543.html

1.ssm框架整合redis

使用spring中封装的各种数据库支持redisTemplate

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-redis</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>

删除原先spring-redis.xml文件

配置spring-data-redis.xml文件

<?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:aop="http://www.springframework.org/schema/aop"
	   xmlns:tx="http://www.springframework.org/schema/tx"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xmlns:mvc="http://www.springframework.org/schema/mvc"
	   xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"  >

	<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
		<property name="maxIdle" value="5"></property>
		<property name="maxTotal" value="10"></property>
	</bean>

	<bean id="redisClusterConfig" class="org.springframework.data.redis.connection.RedisClusterConfiguration">
		<property name="maxRedirects" value="6"></property>
		<property name="clusterNodes">
			<set>
				<bean class="org.springframework.data.redis.connection.RedisNode">
					<constructor-arg index="0" value="192.168.192.3"></constructor-arg>
					<constructor-arg index="1" value="7001"></constructor-arg>
				</bean>
				<bean class="org.springframework.data.redis.connection.RedisNode">
					<constructor-arg index="0" value="192.168.192.3"></constructor-arg>
					<constructor-arg index="1" value="7002"></constructor-arg>
				</bean>
				<bean class="org.springframework.data.redis.connection.RedisNode">
					<constructor-arg index="0" value="192.168.192.3"></constructor-arg>
					<constructor-arg index="1" value="7003"></constructor-arg>
				</bean>
				<bean class="org.springframework.data.redis.connection.RedisNode">
					<constructor-arg index="0" value="192.168.192.3"></constructor-arg>
					<constructor-arg index="1" value="7004"></constructor-arg>
				</bean>
				<bean class="org.springframework.data.redis.connection.RedisNode">
					<constructor-arg index="0" value="192.168.192.3"></constructor-arg>
					<constructor-arg index="1" value="7005"></constructor-arg>
				</bean>
				<bean class="org.springframework.data.redis.connection.RedisNode">
					<constructor-arg index="0" value="192.168.192.3"></constructor-arg>
					<constructor-arg index="1" value="7006"></constructor-arg>
				</bean>

			</set>

		</property>

	</bean>

	<bean id="connectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
		<constructor-arg name="clusterConfig" ref="redisClusterConfig" />
		<property name="poolConfig" ref="poolConfig"></property>

	</bean>

	<!-- 创建完jedisConnectionFactory之后,有两种方式来操作redis
	1:通过jedisConnectionFactory来创建连接操作redis
	2:spring提供了各种数据仓库框架整合的模板类,通过模板类直接操作(最省事)
	-->

	<bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate">
		<property name="connectionFactory" ref="connectionFactory"></property>
		<property name="keySerializer" >
			<bean class="org.springframework.data.redis.serializer.StringRedisSerializer" />
		</property>
		<property name="valueSerializer" >
			<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer" />
		</property>
		<property name="hashKeySerializer">
			<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"/>
		</property>
		<property name="hashValueSerializer">
			<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"/>
		</property>
	</bean>
  </beans>     

在service层创建RedisService接口(定义方法),和RedisServiceImpl实现类(实现具体的操作)

@Service
public class RedisServiceImpl implements RedisService {
    @Autowired
    private RedisTemplate redisTemplate;

}

2.spring-session实现分布式session分离

将用户信息放入session作用域的缺点,session作用域放在tomcat的内存当中,当用户过多,session占用内存资源

使用spring-session实现session分离

  • 是指,通过spring当中封装的session(根据不同的数据库,有不同的session)代替tomcat中的session。
  • session使用setAttrabute方法时,实际上是在redis数据库中存储了一个key-value使用getAttrabute相当于获取了redis数据库中的数据
  • 由于redis有持久化规则,相当于在本地存储,不会占用系统资源

2.1配置方式

  • 导包
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>2.0.4.RELEASE</version>
        </dependency>
  • 在web.xml当中配置过滤器,拦截请求中的session(写在最前面)
	<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>
  • 在spring-data-redis.xml配置文件当中配置spring-session的配置类
	<!-- 配置spring-session的配置类,将来spring-session的过滤器会加载它-->
	<bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
		<property name="maxInactiveIntervalInSeconds" value="3600"></property>
	</bean>
上一篇:SSM开发文件模板


下一篇:ssm项目整合(搭建1)