首页 > 数据库 >分布式session之Spring session+redis

分布式session之Spring session+redis

时间:2023-02-20 19:04:49浏览次数:37  
标签:web spring redis springframework session Spring

分布式session之Spring session+redis_redis

给Spring session配置基于redis来存储session数据,然后配置了一个Spring session的过滤器,这样的话,session相关操作都会交给Spring session来管了,接着在代码中,就用原生的session操作,就是基于Spring session从redis中获取数据了。

导入依赖

<!--spring 版本-->
    <spring.version>5.0.2.RELEASE</spring.version>
    <spring.session.data.redis.version>1.3.1.RELEASE</spring.session.data.redis.version>
    <lettuce.version>3.5.0.Final</lettuce.version>


<!-- spring web包 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.session</groupId>
      <artifactId>spring-session-data-redis</artifactId>
      <version>${spring.session.data.redis.version}</version>
    </dependency>
    <dependency>
      <groupId>biz.paluch.redis</groupId>
      <artifactId>lettuce</artifactId>
      <version>${lettuce.version}</version>
    </dependency>

编写redis配置文件

redis.host=192.168.80.22
redis.pass=myredis
redis.port=6379
redis.session.timeout=600

编写spring配置文件

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

    <context:annotation-config />

    <!-- 加载properties文件 -->
    <bean id="configProperties"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:session-redis.properties</value>
            </list>
        </property>
    </bean>

    <!-- RedisHttpSessionConfiguration -->
    <bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <!-- session过期时间,单位是秒 -->
        <property name="maxInactiveIntervalInSeconds" value="${redis.session.timeout}" />
    </bean>

    <!--LettuceConnectionFactory -->
    <bean class="org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory"
            p:host-name="${redis.host}" p:port="${redis.port}" />

</beans>

配置web.xml

拦截器拦截请求后,web请求中的request已经不一样了,但是用法一样

<!--加载spring配置文件-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:applicationContext-session.xml</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>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>ERROR</dispatcher>
  </filter-mapping>

标签:web,spring,redis,springframework,session,Spring
From: https://blog.51cto.com/u_15973676/6069322

相关文章

  • 生产环境中redis是怎么部署的?
    你的redis是不是主从架构?集群架构?用了哪种集群方案?有没有用高可用保证?有没有开启持久化机制确保可以进行数据恢复?线上redis给几个G的内存?设置了哪些参数?压测后你们redis......
  • 分布式锁用 Redis 还是 Zookeeper?
    为什么用分布式锁?在讨论这个问题之前,我们先来看一个业务场景:系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查......
  • redis集群模式
    以前的redis要搞几个节点,每个节点存储一部分的数据,得借助一些中间件来实现,比如说有codis、twemproxy,有一些redis中间件,你读写redis中间件,redis中间件负责将你的数据分布......
  • redis的雪崩和穿透
    一、缓存雪崩缓存挂了以后,大量请求拖垮后面的数据库。如何解决缓存雪崩?1、事前redis高可用,主从+哨兵,rediscluster,避免全盘崩溃2、事中本地ehcache缓存+hystr......
  • redis的并发竞争问题
    第一种方案:分布式锁1.整体技术方案这种情况,主要是准备一个分布式锁,大家去抢锁,抢到锁就做set操作。2.为什么是分布式锁?因为传统的加锁的做法(如java的synchronized和l......
  • redis中热点数据及大value处理
    1.redis的热点数据是什么,可能出现什么问题?某个key的访问频率很高,当一个key的qps到达1000的时候就需要关注了。redis中数据分布在集群的不同节点上,当某个key的qps过高,容......
  • Spring Cloud netty
    <properties><spring.boot.version>2.3.2.RELEASE</spring.boot.version><spring.cloud.version>Hoxton.SR8</spring.cloud.version><spring.......
  • 客户端跟redis的一次通信流程
    1.在redis启动初始化的时候,redis会将连接应答处理器跟AE_READABLE事件关联起来,接着如果一个客户端跟redis发起连接,此时会产生一个AE_READABLE事件,然后由连接应答处理......
  • Memcached与Redis有什么区别
    Redis和Memcached都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与......
  • Spring Cloud底层原理
    SpringCloud是一个全家桶式的技术栈,包含了很多组件。本文先从其最核心的几个组件入手,来剖析一下其底层的工作原理。也就是Eureka、Ribbon、Feign、Hystrix、Zuul这几个......