springsession原理及redis缓存处理
1 Redis 中数据
通过springsession存储了用户的session数据,如下:
"spring:session:expirations:1634214780000" 记录了失效时间是哪个session的,指向下面的key
"spring:session:sessions:6317e334-90e9-4f55-a1f5-07492a8c8b2a" 保存了session相关信息(创建时间,session保存的对象信息,最大超时时间:默认1800秒,最后的修改时间)
"spring:session:sessions:expires:6317e334-90e9-4f55-a1f5-07492a8c8b2a" 空值
a) spring:session:sessions:xxx
Hash 类型。
表示整个 Session 对象。里面包含创建时间、最后访问时间等。
sessionAttr:userPwd和sessionAttr:userName:保存在会话的属性
maxInactiveInterval:超时时间,如果值为0或者负数,那就永远不会超时
spring:session:sessions:expires
string 类型。
没有什么特殊内容。表示当前 session 过期状态。
c) spring:session:erxpirations:时间戳
set 类型。
里面存储了这个时间戳是哪个 session 的。
127.0.0.1:6379> smembers "spring:session:expirations:1634214780000"
1) "\xac\xed\x00\x05t\x00,expires:6317e334-90e9-4f55-a1f5-07492a8c8b2a"
2
127.0.0.1:6379> smembers "spring:session:expirations:1634214780000"
1) "\xac\xed\x00\x05t\x00,expires:6317e334-90e9-4f55-a1f5-07492a8c8b2a"
2:Spring Session 原理
1 SpringSession 中 Session 对象创建及获取流程图
Spring 获取 Session 对象的文字说明
用户访问服务器端,服务器端会判断请求对象 Cookie 中是否包含 session 的键值对
- 如果 cookie 不包含 Session 键值对会创建 Session 对象,对象中包含:
- creationTime创建时间、
- lastAccessedTime 最后一次访问时间、
- maxInactiveInterval 有效时间。
- 如果 cookie 包含 Session 键值对,根据 session 键值对的值拼接 spring:session:value
- redis 中取出 session 对象。首先会判断 Session 对象是否过期。如果过期了,需要重新创建。执行步骤 2
- 如果没有过期,刷新 lastAccessedTime。刷新后重新放入到 redis 中。
3:Redis对商品的缓存处理
注解开发:
@Cacheable(标记类或方法可以被缓存)
@Cacheable可以标记在一个方法上,也可以标记在一个类上。当标记在一个方法上时表示该方法是支持缓存的,当标记在一个类上时则表示该类所有的方法都是支持缓存的。对于一个支持缓存的方法,Spring会在其被调用后将其返回值在redis中缓存起来,以保证下次利用同样的参数来执行该方法时可以直接从redis缓存中获取结果,而不需要再次执行该方法。
缓存过期时间的处理?
重写RedisCacheManager配置类
@CachePut(用来更新redis中的缓存数据)
@CachePut也可以声明一个方法支持缓存功能。与@Cacheable不同的是使用@CachePut标注的方法在执行前不会去检查缓存中是否存在之前执行过的结果,而是每次都会执行该方法,并将执行结果以键值对的形式存入指定的缓存中
与 @Cacheable的不同: @Cacheable在每次访问都会检查redis中是否存在对应的key,存在即从redis中拿出来用 @CachePut不会再检查redis中是否存在对应的key,直接覆盖redis中原来key上的数据 |
@CacheEvict(删除和使用redistemplate删除基本一致:须在controler层使用才有效)
@CacheEvict是用来标注在需要清除缓存元素的方法或类上的。当标记在一个类上时表示其中所有的方法的执行都会触发缓存的清除操作。
注意:使用@CacheEvict注解的方法必须是controller层直接调用,service里间接调用不生效。
springsession原理及redis缓存处理相关推荐
- redis缓存实现原理php,分析redis原理及实现
下面由Redis教程栏目给大家介绍分析redis原理及实现,希望对需要的朋友有所帮助! 1 什么是redis redis是nosql(也是个巨大的map) 单线程,但是可处理1秒10w的并发(数据都在 ...
- 最全redis缓存核心知点(原理+图解)
redis缓存核心知点 一.主流应用架构 二.缓存知识考点 三.多路I/O复用模型 四.常用的数据类型 五.消息队列 六.Redis的持久化 6.1 BGSAVE原理 6.2 RBD持久化的缺点 6. ...
- Redis综述篇:与面试官彻夜长谈Redis缓存、持久化、淘汰机制、哨兵、集群底层原理!...
点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 于哥你好,最近面试挺多的,尤其是在问到java面试题,Redis被问的特别多,比如Red ...
- redis缓存原理与实现_SpringBoot整合Redis缓存,手把手教你一步一步实现
推荐学习 分布式大全:反向代理/Redis/中间件/MySQL/消息,挑战阿里P7必备 都是"Redis惹的祸",害我差点挂在美团三面,真是"虚惊一场" 微服务 ...
- Redis缓存设计原理及实战
缓存是什么? 一个系统中的不同层之间的访问速度不一样,所以我们才需要缓存,这样就可以把一些需要频繁访问的数据放在缓存中,以加快它们的访问速度. 为了让你能更好地理解,我以计算机系统为例,来解释一下.下 ...
- Redis 缓存穿透、雪崩、缓存数据库不一致、持久化方式、分布式锁、过期策略
1. Redis 缓存穿透 1.1 Redis 缓存穿透概念 访问了不存在的 key,缓存未命中,请求会穿透到 DB,量大时可能会对 DB 造成压力导致服务异常. 由于不恰当的业务功能实现,或者外部恶 ...
- 总结:如何使用redis缓存加索引处理数据库百万级并发
前言:事先说明:在实际应用中这种做法设计需要各位读者自己设计,本文只提供一种思想.准备工作:安装后本地数redis服务器,使用mysql数据库,事先插入1000万条数据,可以参考我之前的文章插入数据, ...
- Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?
欢迎关注方志朋的博客,回复"666"获面试宝典 原始数据存储在 DB 中(如 MySQL.Hbase 等),但 DB 的读写性能低.延迟高. 比如 MySQL 在 4 核 8G 上 ...
- 关于Redis缓存,这3个问题一定要知道!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:https://4m.cn/e3JwR 最近都没看R ...
最新文章
- 如何查找基因在发表研究中的表达
- 从洗牌算法谈起--Python的random.shuffle函数实现原理
- MJExtension 模型嵌套模型数组
- 35岁之后,你还会继续写代码吗?
- 用cookie实现保存密码
- RHCE是否还值得考取?
- JAVA复习5(集合—— Vetor)
- iOS运行时-使用Runtime向Category中添加属性以及运行时介绍
- 有关的命令linux,Linux与用户有关的命令
- VC 系统托盘 气泡提示
- Springboot03整合SpringDataJPA访问MySQL数据库
- onbeforeedit和onbeginedit数据不一致_深度解读,奔溃一致性、应用一致性的区别
- Windows 7安装到虚拟磁盘VHD文件中
- linux 如何访问weblogic console,怎么修改weblogic console登陆的用户名和密码
- WinEdt Latex使用人家提供的模板时无法插入参考文献的方法
- Word中页眉文字下横线如何变化粗细线型,页脚文字上方如何添加横
- 强烈推荐:网工利器PNETLab模拟器
- Go 语言中的switch分支
- 2018 11.1 PION 模拟赛
- Kotlin学习路(七):高阶函数与内联函数关系