天天看点

Spring Session Redis最佳实践(1)简单入门

欢迎转至站内查看原文,链接为:https://www.chendd.cn/information/viewInformation/experienceShare/309.a

如果你关注Spring Session JDBC的实现可关注前面一篇文章。本文所谓的Spring Session Redis的简单入门,主要是根据github上的Spring Session项目源码实践而来,具体是从该项目中摘一些示例代码,按照需要,修改而来。

目录

本文目标

最佳实践

总结一下

源码下载

本文目标

实现基于Redis的Spring Session管理(不含Redis的搭建过程),spring-session-data-redis的版本为2.1.3.RELEASE,依赖的Spring版本为5.1.4.RELEASE,实现一个分布式的Session管理示例,多个服务器(端口不同)下session数据一致。

最佳实践

(一)Maven依赖

<!-—spring redis相关 -->
<dependency>
    <groupId>org.springframework.session</groupId>
    <artifactId>spring-session-data-redis</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>2.9.1</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>5.1.4.RELEASE</version>
</dependency>
<!—servlet与jstl环境,示例中为JSP -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<!—logback 日志管理 -->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-access</artifactId>
    <version>1.1.7</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>
<!-- json -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>
           

(二)session.xml参数配置

<!—-载入参数配置文件properties-->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <array>
            <value>classpath:spring-config-redis.properties</value>
        </array>
    </property>
</bean>

<!--直接采用property的形式可以看到很多属性已经过期了-->
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
      p:hostName="${spring.redis.hostName}" p:port="${spring.redis.port}" p:database="${spring.redis.database}"
      p:poolConfig-ref="jedisPoolConfig"
>
</bean>

<!—-Jedis参数配置-->
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxTotal" value="${spring.redis.maxTotal}"/>
    <property name="maxIdle" value="${spring.redis.maxIdle}"/>
    <property name="minIdle" value="${spring.redis.minIdle}"/>
    <property name="testOnBorrow" value="${spring.redis.testOnBorrow}"/>
    <property name="maxWaitMillis" value="${spring.redis.maxWaitMillis}"/>
</bean>
           

(三)页面示例效果--session在不同服务器上的数据共享

Spring Session Redis最佳实践(1)简单入门

(同一个session在8080服务器保存的数据)

Spring Session Redis最佳实践(1)简单入门

(同一个session在8888服务器保存的数据)

总结一下

(1)前面的 jedisConnectionFactory 对象配置属性时,IDEA中给出了一些属性设置时是过期的,为了屏蔽过期的属性显示,故写成了 p:port 的写法,正常使用 property 属性声明即可;

(2)当logback的日志级别为debug时,启动时控制台会有错误的堆栈日志输出,但它不算是错,将日志级别调整为info后可以屏蔽,参考如下图所示:

Spring Session Redis最佳实践(1)简单入门

(3)既然数据已经存储至Redis了,一起来分析一下它存的都是些什么值,比如浏览器创建了一个Session ID,对应的Redis下对应了3条数据(与之前的JDBC一致),参考如下:

Spring Session Redis最佳实践(1)简单入门

在Redis中查看其具体的数值信息,发现它默认存储的数据为Java序列化后的数据,它的具体数值存储的有一些个具体的属性值,如过期时间、sessionKey等等,还有一些看起来不能识别的特殊字符,它们都是Java序列化存储的结果,详细如下图所示:

Spring Session Redis最佳实践(1)简单入门
--查看某个session ID的对象数据
127.0.0.1:6379[5]> hgetall "spring:session:sessions:c3c007d3-fdd9-4ccf-ae55-1e8a53404cdf"
--查看某个session ID的某个属性
127.0.0.1:6379[5]> hget "spring:session:sessions:c3c007d3-fdd9-4ccf-ae55-1e8a53404cdf" "creationTime"
           

(4)其实我是Redis新手,如果要问我上面的命令是如何总结出来的,我会说我有使用Jedis客户端连接后,使用它提供的Java Api进行的分析,比如它里面有个 type 函数,我们可以知道这个session ID存储的到底是个什么类型的结构,以及使用这个结构找到其对应的取数函数将数据给显示出来。

源码下载

https://gitee.com/88911006/chendd-examples

继续阅读