基于Redis存储Session的实现流程图如下所示:
1. 引入相关依赖
<!--spring data redis 依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--commons-pool2 对象池依赖-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!--Spring Session-->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
2.在配置文件中,配置redis服务器地址,端口号,数据库,lettuce连接池(线程安全)等,配置完成后,运行程序
这时候看到redis中session的值都是二进制的,通过序列化可以看到具体的值
3.通过配置RedisTemplates实现序列化
//key序列化
redisTemplate.setKeySerializer(new StringRedisSerializer());
//value序列化
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
hash数据类型本身是key-value形式的,需要对hash单独进行序列化
优点:
- 这是企业中使用的最多的一种实现分布式Session的方式
- SpringBoot为我们封装好了spring-session,直接引入依赖即可
- 数据保存在redis中,无缝接入,不存在任何安全隐患
- redis自身可做集群,搭建主从,同时方便管理
缺点:
- 多了一次网络调用,web容器需要向redis访问