### 18.3.2 使用Redis
本章将用Redis来保存Session,你需要安装Redis,如果未安装,请参考Redis一章,Spring Boot的配置如下:
~~~properties
spring.session.store-type=Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379
spring.redis.password=Redis!123
~~~
还需要引入对Redis的依赖
~~~xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
~~~
再次访问/putsession.html后,我们通过redis客户端工具访问redis,比如使用redis-cli,键入如下命令
~~~
keys spring:session:*
~~~
查询所有“spring:session:”开头的keys,输出类似如下
~~~
3) "spring:session:sessions:expires:863c7e73-8249-4780-a08e-0ff2bdddda86"
....
7) "spring:session:sessions:863c7e73-8249-4780-a08e-0ff2bdddda86"
~~~
会话信息存放在“spring:session:sessions:开头"的key里,863c7e73-8249-4780-a08e-0ff2bdddda86代表一个会话id,“spring:session:sessions“是一个Hash数据结构,可以用Redis HASH相关的命令来查看这个用户会话的数据,使用hgetall 查看会话所有的信息
~~~
>hgetall "spring:session:sessions:863c7e73-8249-4780-a08e-0ff2bdddda86"
1) "sessionAttr:user"
2) "maxInactiveInterval"
.......
~~~
使用如下命令来查看该session的user信息
~~~
>HMGET "spring:session:sessions:863c7e73-8249-4780-a08e-0ff2bdddda86" sessionAttr:user
~~~
sessionAttr:user 是Spring Session存入Redis的key值,sessionAttr:是其前缀, user是我们在Spring Boot设置会话Key。其他Spring Boot默认还创建的key还有
* creationTime ,创建时间
* maxInactiveInterval 指定时间(秒)后过期
* lastAccessedTime 上次访问时间
* sessionAttr: 以“sessionAttr:”为前缀的会话信息,比如sessionAttr: user
因此,Redis保存的会话类似这样的格式用Redis来操作,类似如下
~~~
>HMSET spring:session:sessions:863c7e73-8249-4780-a08e-0ff2bdddda86 creationTime 1404360000000 maxInactiveInterval 1800 lastAccessedTime 1404360000000 sessionAttr:attrName someAttrValue sessionAttr:attrName2 someAttrValue2
~~~
> **注意**
>
> Spring Session 的Redis实现,并不是每次通过Session类获取会话信息或者保存的时候都会调用redis操作,他会先尝试从内部的HashMap读取值,如果没有,才调用redis 的HMGET 操作。同样,当保存会话的时候,也并没有立即调用Redis操作,而是先保存到HashMap中,等待服务请求结束后再将变化的值使用HMSET更新 。如果你想在保存会话操作后立即更新到Reids里,你需要配置成IMMEDIATE 模式,修改配置属性
>
> ~~~properties
> spring.session.redis.flushMode=IMMEDIATE
> ~~~
>
我们注意到,还有另外一个Redis Key 是 “spring:session:sessions:expires:863c7e73-8249-4780-a08e-0ff2bdddda86”,这是因为redis会话过期并没有直接使用在session:sessions:key变量上,而是专门用在session:sessions:expires:key上,当此key过期后,会自动清除对应的会话信息.使用ttl查看会话过期时间
~~~
>ttl spring:session:sessions:expires:863c7e73-8249-4780-a08e-0ff2bdddda86
(integer) 1469
~~~
默认是1800秒,即30分钟,现在只剩下1469秒。
- 再版说明
- 13 REST
- 13.1 REST
- 13.1.1 REST 风格的架构
- 13.1.2 使用api作为上下文
- 13.1.3 增加一个版本标示
- 13.1.4 标识资源
- 13.1.5 确定HTTP METHOD
- 13.1.6 确定HTTP Status
- 13.1.7 REST VS WebService
- 13.2 SpringBoot Rest集成
- 13.2.1 集成REST
- 13.2.2 @RestController
- 13.2.3 REST Client
- 13.3 Swager UI
- 13.3.2 集成Swager UI
- 13.3.3 OpenAPI 规范
- 13.3.4 接口描述
- 13.3.5 查询参数描述
- 13.3.6 URI中的参数
- 13.3.7 HTTP 头参数
- 13.3.8 表单参数
- 13.3.9 整个请求体作为参数
- 14 MongoDB
- 14.1 安装MongoDB
- 14.2 使用shell
- 14.2 .1 指定数据库
- 14.2.2 插入文档
- 14.2.3 查询文档
- 14.2.4 更新操作
- 14.2.5 删除操作
- 14.3 Spring Boot集成
- 14.4 增删改查
- 14.4.1 增加API
- 14.4.2 根据主键查询API
- 14.4.3 查询API
- 14.4.4 修改API
- 14.4.5 删除API
- 14.4.6 使用MongoDatabase
- 14.4.7 打印日志
- 14.5 使用Spring Data
- 15 Redis
- 15.1 安装Redis
- 15.2 使用redis-cli
- 15.2 .1 安全设置
- 15.2.2 基本操作
- 15.2.3 Keys
- 15.2.3 Redis List
- 15.2.4 Redis Hash
- 15.2.5 Set
- 15.2.6 Pub&Sub
- 15.3 Spring Boot 集成
- 15.4 使用StringRedisTemplate
- 15.4.1 opsFor
- 15.4.2 绑定key的操作
- 15.4.3 RedisConnection
- 15.4.4 Pub&Sub
- 15.4.5 Pipeline
- 15.5 序列化策略
- 15.5.1 默认序列化策略
- 15.5.2 自定义序列化策略
- 16 Elastic Search
- 16.1 Elastic Search 介绍
- 16.1.1Elastic 安装
- 16.2.1 创建Index
- 16.2.2 添加文档
- 16.2.3 根据主键查询
- 16.2.4 根据主键更新
- 16.2.5 根据主键删除
- 16.2.6 搜索文档
- 16.2.7 联合多个索引搜索
- 16.2.8 Mapping
- 16.2.9 路由
- 16.3 使用RestTemplate 访问ES
- 16.3.1 创建Book
- 16.3.2 使用RestTemplate 获取搜索结果
- 16.4 Spring Data Elastic
- 16.4.1 安装Spring Data
- 16.4.2 编写entity
- 15.4.3 编写Dao
- 16.4.4 编写Controller
- 17 Cache
- 17.1 关于Cache
- 17.1.1 Cache 组件和概念
- 17.1.2 Cache的单机应用
- 17.1.3 使用专有的Cache服务器
- 17.1.4 使用一二级缓存服务器
- 17.2 Spring Boot Cache
- 17.2.1 集成Spring cache
- 17.3 注释驱动缓存
- 17.3.1 @Cacheable
- 17.3.2 KEY生成器
- 17.3.2 @CachePut
- 17.3.3 @CacheEvict
- 17.3.4 @Caching
- 17.3.5 @CacheConfig
- 17.4 使用Redis Cache
- 17.4.1集成Redis 缓存
- 17.4.2 禁止缓存
- 17.4.3 定制缓存
- 17.4. 5 Redis缓存原理
- 17.5 实现Redis 俩级缓存
- 17.5.1 实现 TwoLevelCacheManager
- 17.5.2 创建RedisAndLocalCache
- 17.5.3 缓存同步说明
- 17.5.4 将代码组合在一起
- 18 Spring Session
- 18.1 水平扩展实现
- 18.2 nginx 安装和配置
- 18.2.1 安装nginx
- 18.2.2 配置nginx
- 18.3 Spring Session
- 18.3.1 Spring Session介绍
- 18.3.2 使用Redis
- 18.3.3 Nginx+Redis
- 19 SpringBoot 和 Zookeeper
- 19.1 Zookeeper
- 19.1.1 zookeeper 数据结构
- 19.1.2 Zookeeper 安装
- 19.1.3 zookeeper 基本命令
- 19.1.4 领导选取演示
- 19.1.5 分布式锁演示
- 19.1.6 服务注册演示
- 19.2 Spring boot 集成zookeeper
- 19.2.1 集成 Curator
- 19.2.2 Curator api
- 19.3 分布式锁实现
- 19.4 服务注册
- 19.4.1 服务注册
- 19.4.2 获取服务
- 19.5 领导选取
- 19.6 屏障
- 20 监控SpringBoot应用
- 20.1 安装Acutator
- 20.2 HTTP 跟踪
- 20.3 日志查看
- 20.4 线程栈信息
- 20.5 内存信息
- 20.6 查看URL映射
- 20.7 查看Spring管理Bean
- 20.8 其他监控
- 20.9 编写自己的监控信息
- 20.9.1 编写HealthIndicator
- 20.9.2 自定义监控。