目录
1.概述
2.常用缓存
2.1本地缓存
2.2集中缓存
3.缓存相关概念
4.方案应用
下面以登录验证码为例来看下:
性能,扛压,高并发,提升用户体验..等等这些,都离不开缓存。
都知道,内存读写速度远远高于磁盘,传统数据库如mysql是将数据落地在磁盘上的。所以当我们前端用户发起数据请求,到后端去处理查询数据库并返回。当短时间内大量请求压过来时,我们直接读取数据库,mysql数据库的压力会非常大。如果将部分数据提前调到内存中,cpu就可以快速的读取数据返回给用户。
建议选用支持spring cache规范的缓存实现,如ehcache、jetcache。或者用caffine、guavacache等。我们项目中用的是jetcache
redis.
1.支持数据淘汰和容量限制
2.过期时间存储与设置
3.redis的持久化
1.短信验证码
2.登录验证码
3.token
4.redis生成全局ID
5.阅读量计数器
6.等等,一些高频访问,且变更小的视图数据。
刷新页面,进行登录验证码请求
发起请求
封装验证码并返回
此处验证码值12作为value,以固定前缀+uuid作为key缓存如redis中,有效期30分钟
返回uuid,和图片的base64编码给前端。
查看redis中的存储
前端用户输入12并登录,此处以springsecurity+oauth2方式登录,将12以code值放入请求头中登入。(登录详情就不赘述了),看下验证码校验部分
这里拿到前端传来的key就是uuid 和code就是12。
然后从redis中通过固定前缀+uuid作为key拿到redis中已经存的值就是上一步存的。
进行校验
清除redis中该key所存储的值。
这里用uuid来区分不同的用户登录验证码。
上一篇:不同架构下的全链路性能测试案例
下一篇:状态初始化源码解读