redis保存session信息的示例代码

本文实现一个将session信息保存在 redis中,多个tomcat中的工程都从redis获取session信息的示例。

1、新建一个maven web 工程名为 session-redis 如下:

目录结构如下:

2、修改配置文件内容

pom.xml 中依赖如下:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
     <spring.version>5.0.4.RELEASE</spring.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
      <!--spring 依赖包-->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>${spring.version}</version>
      </dependency>
      <!--spring 依赖包  结束-->
      <!-- Spring 升级4+ 依赖的JSON包 -->
      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.9.5</version>
      </dependency>
      <dependency>
          <groupId>commons-collections</groupId>
          <artifactId>commons-collections</artifactId>
          <version>3.2.2</version>
      </dependency>
      <!-- /Spring 升级4+ 依赖的JSON包 -->
      <!--sfl4j+spring-->
      <dependency>
          <groupId>ch.qos.logback</groupId>
          <artifactId>logback-classic</artifactId>
          <version>1.2.3</version>
      </dependency>
      <dependency>
          <groupId>org.logback-extensions</groupId>
          <artifactId>logback-ext-spring</artifactId>
          <version>0.1.5</version>
      </dependency>
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>jcl-over-slf4j</artifactId>
          <version>1.7.25</version>
      </dependency>
      <!--sfl4j+spring-->
      <!--jedis依赖-->
      <dependency>
          <groupId>redis.clients</groupId>
          <artifactId>jedis</artifactId>
          <version>2.9.0</version>
      </dependency>
      <!--web包依赖-->
      <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
          <scope>compile</scope>
      </dependency>
      <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>jsp-api</artifactId>
          <version>2.2</version>
      </dependency>
      <!--spirng实现redissession存储依赖包-->
      <dependency>
          <groupId>org.springframework.session</groupId>
          <artifactId>spring-session-data-redis</artifactId>
          <version>2.0.4.RELEASE</version>
      </dependency>
  </dependencies>

web.xml 配置文件内容

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!--配置spring session 过滤器   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>
  <!-- 配置springmvc -->
  <servlet>
    <servlet-name>springMvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath*:mvc-demo.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springMvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

mvc-demo.xml 增加配置内容、

  <!--spring注解配置-->
  <mvc:annotation-driven/>
    <context:component-scan base-package="com.test.session"/>
    <!--redis保存session信息配置类-->
    <bean id="redisHttpSessionConfiguration"
          class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration">
        <property name="maxInactiveIntervalInSeconds" value="60"/><!--session 信息过期时间-->

    </bean>
    <!--redis 链接信息配置-->
    <bean id="standlongConfig" class="org.springframework.data.redis.connection.RedisStandaloneConfiguration">
        <property name="port" value="6379"/>
        <property name="hostName" value="127.0.0.1"/>
        <property name="database" value="0"/>
    </bean>
      <!--jedis 连接工厂配置-->
    <bean id="jedisConnectionFactory" class="
    org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
        <constructor-arg name="standaloneConfig" ref="standlongConfig"/>
    </bean>

3、增加IndexController类,里边两个方法
index 方法返回字符串 index ,并且在session中添加属性 name 为 zhangsan ,打印sessionid
getName 方法 返回session中的name属性 .打印sessionid
如下:

@RestController
public class IndexController {

    @GetMapping ("/index")
    public String index(HttpServletRequest request){
        request.getSession().setAttribute("name","zhagnsan");
        System.out.println("-----index------------sessionid"+request.getSession().getId());
        return "index";
    }

    @GetMapping ("/getName")
    public String getName(HttpServletRequest request){
        System.out.println("----getName-------------sessionid======"+request.getSession().getId());

        return  (String)request.getSession().getAttribute("name");
    }
}

4、在本机启动redis服务

5、idea中配置两个tomcat 端口不能相同 我们这里 tomcat8.5-1 使用 80端口 tomcat8.5-1使用8080 端口 如下:

两个tomcat 都部署session_redis 工程如下 ,访问路径为 /

6、启动两个tomcat 访问 tomcat1 中的项目 http://localhost:80/index 在session中设置了name =zhangsan

后台打印sessionid为:

直接访问 tomcat2 中的 getName 方法 http://localhost:8080/getName 可以直接访问到 session 并且后台输出sessionid和tomcat1中相同 。所以 session保存成功。

由 于我们在配置文件中设置 session过期时间为 60秒 所以60秒后再次访问 getName方法,发现访问不到内容了如下:

7、通过redis 客户端 我们可以看到 随着session信息的保存以及过期 redis中键值的变化 ,如下:

代码下载地址: https://github.com/zhangxinmin/session-redis.git

到此这篇关于redis保存session信息的文章就介绍到这了,更多相关redis保存session信息内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何使用Redis保存用户会话Session详解

    前言 PHP内置的绘画存储机制是把全部的会话数据保存在服务器上的文本文件里面,这些文件通常都是保存在服务器上的临时目录里.如果并发量大,读写效率非常低.而Redis对高并发的支持非常好,所以,可以使用redis替代文件存储session. 下载源码 session_set_save_handler函数 PHP的session_set_save_handler函数用来定义用户级session保存函数(如打开.关闭.写入等).原型如下: bool session_set_save_hanler(ca

  • PHP实现负载均衡session共享redis缓存操作示例

    本文实例讲述了PHP实现负载均衡session共享redis缓存操作.分享给大家供大家参考,具体如下: 1.首先先创建html表单页面 <meta chatset='utf-8'> <center> <form action="se.php" method="post"> <table> <tr> <td>帐号:</td> <td><input type="

  • SpringCloud实现Redis在各个微服务的Session共享问题

    在微服务中,需要我们在各个微服务中共享Session,使用Redis来共享Session是一个很好的解决方法,Redis是运行在内存中,查取速度很快. 1.pom文件中添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> </dependency> <depe

  • spring boot整合redis实现shiro的分布式session共享的方法

    我们知道,shiro是通过SessionManager来管理Session的,而对于Session的操作则是通过SessionDao来实现的,默认的情况下,shiro实现了两种SessionDao,分别为CachingSessionDAO和MemorySessionDAO,当我们使用EhCache缓存时,则是使用的CachingSessionDAO,不适用缓存的情况下,就会选择基于内存的SessionDao.所以,如果我们想实现基于Redis的分布式Session共享,重点在于重写Session

  • Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码

    一位伙计自己开了个游戏室,想在群里拉点人,就用所学知识帮帮忙,于是就有了这篇文章,今天小编特此通过实例代码给大家介绍下Python selenium 加载并保存QQ群成员去除其群主.管理员信息的示例代码 模拟登陆页面 页面分析 思路: 点击登陆按钮 选择要登陆的账号 代码实现 # Author:smart_num_1 # Blog:https://blog.csdn.net/smart_num_1 # WeChat:Be_a_lucky_dog from selenium import webd

  • Redis实现登录注册的示例代码

    目录 1. 引言 2. 流程图及代码实现 2.1 生成验证码保存到Redis 2.2 登录验证 2.3 请求拦截器 3. 总结 1. 引言 在传统的项目中,用户登录成功,将用户信息保存在session中,这种方式在微服务架构中会产生一系列问题.例如在购物车服务具有多台服务器,当一个请求落在购物车1号服务器后,其session保存了用户信息,另一个请求落在了购物车2号服务器,发现没有用户信息,则重新需要进行登录.服务器之间有session不共享的问题.为了解决这一问题,tomcat提出了内存拷贝,

  • Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数示例代码

    最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4.项目准备 5.编写 Dockerfile 6.发布项目 7.测试服务 环境准备 系统:Ubuntu 17.04 x64 Docker 17.12.0-ce IP:45.32.31.101 一.安装 Docker CE 国内不建议使用:"脚本进行安装",会下载安装很慢,使用步骤 1 安装,看下面的链接:常规安装方式 1.常规安装方式 Ubuntu 17.04 x64 安装

  • Redis实现UV统计的示例代码

    目录 一.HyperLogLog 1.为什么用HyperLogLog 2.HyperLogLog是什么 二.实现UV统计 一.HyperLogLog 1.为什么用HyperLogLog 先介绍两个概念: UV:全称 Unique Visitor,也叫独立访客量,是指通过互联网访问.浏览这个网页的自然人.1 天内同一个用户多次访问该网站,只记录 1 次.PV:全称 Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录一次 PV,用户多次打开页面,则记录多次 PV.往往用来衡量

  • Java利用Redis实现消息队列的示例代码

    本文介绍了Java利用Redis实现消息队列的示例代码,分享给大家,具体如下: 应用场景 为什么要用redis? 二进制存储.java序列化传输.IO连接数高.连接频繁 一.序列化 这里编写了一个java序列化的工具,主要是将对象转化为byte数组,和根据byte数组反序列化成java对象; 主要是用到了ByteArrayOutputStream和ByteArrayInputStream; 注意:每个需要序列化的对象都要实现Serializable接口; 其代码如下: package Utils

  • Android 同时setTag两次保存多种值的示例代码

    setTag是android的view类中很有用的一个方法,可以用它来给空间附加一些信息,在很多场合下都得到妙用. 示例代码: view.setTag(R.string.action_settings,hodler.content); 接收两个值,一个是key值,必须是唯一值,而且要写在values/string.xml 里面,例如 <resources> <item type ="id" name = "ffffff"></item&

  • MyBatis整合Redis实现二级缓存的示例代码

    MyBatis框架提供了二级缓存接口,我们只需要实现它再开启配置就可以使用了. 特别注意,我们要解决缓存穿透.缓存穿透和缓存雪崩的问题,同时也要保证缓存性能. 具体实现说明,直接看代码注释吧! 1.开启配置 SpringBoot配置 mybatis: configuration: cache-enabled: true 2.Redis配置以及服务接口 RedisConfig.java package com.leven.mybatis.api.config; import com.fasterx

  • SpringBoot结合Redis实现接口幂等性的示例代码

    目录 介绍 实现过程 引入 maven 依赖 spring 配置文件写入 引入 Redis 自定义注解 token 的创建和实现 拦截器的配置 测试用例 介绍 幂等性的概念是,任意多次执行所产生的影响都与一次执行产生的影响相同,按照这个含义,最终的解释是对数据库的影响只能是一次性的,不能重复处理.手段如下 数据库建立唯一索引 token机制 悲观锁或者是乐观锁 先查询后判断 小小主要带你们介绍Redis实现自动幂等性.其原理如下图所示. 实现过程 引入 maven 依赖 <dependency>

  • Android 获取屏幕的多种宽高信息的示例代码

    本文主要介绍了Android 获取屏幕的多种宽高信息的示例代码,分享给大家,具体如下: 包含的宽高信息如下图所示: 在模拟器上获取到的数据: 08-26 07:19:32.712 7834-7834/com.czy.screeninfo E/MainActivity: getTotalScreenHeight 1920 08-26 07:19:33.505 7834-7834/com.czy.screeninfo E/MainActivity: getScreenWidth 1080 08-26

  • springboot 在xml里读取yml的配置信息的示例代码

    YML是什么 YAML (YAML Ain't a Markup Language)YAML不是一种标记语言,通常以.yml为后缀的文件,是一种直观的能够被电脑识别的数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAML库的不同的编程语言程序导入,一种专门用来写配置文件的语言.可用于如: Java,C/C++, Ruby, Python, Perl, C#, PHP等. 可以用<springProperty> 标签从Spring中显示属性 以下为在日志配置文件中读取的示例

随机推荐