本文整理自小d课堂笔记和java进阶仓库,如有雷同,大部分是人家写的
java进阶仓库:https://doocs.github.io/advanced-java/#/
redis[2] redis 配置及分布式锁介绍
学习xiao D课堂的项目笔记
SpringDataRedis配置RedisTemplate介绍
- RedisTemplate介绍
- ValueOperations:简单K-V操作
- SetOperations:set类型数据操作
- ZSetOperations:zset类型数据操作
- HashOperations:针对map类型的数据操作
- ListOperations:list类型的数据操作
- RedisTemplate和StringRedisTemplate的区别
- StringRedisTemplate继承RedisTemplate
- 两者的数据是不共通的(默认的序列化机制导致key不一样)
- StringRedisTemplate默认采用的是String的序列化策略
- RedisTemplate默认采用的是JDK的序列化策略,会将数据先序列化成字节数组然后在存入Redis数据库
- 总结
- 当redis数据库里面本来操作的是字符串数据的时候,那使用StringRedisTemplate即可
- 数据是复杂的对象类型,那么使用RedisTemplate是更好的选择
- 操作
案例实战之注册登录-图形验证码+谷歌开源Kaptcha引入
- 背景
- 注册-登录-修改密码一般需要发送验证码,但是容易被攻击恶意调用
- 什么是短信-邮箱轰炸机
- 手机短信轰炸机是批、循环给手机无限发送各种网站的注册验 证码短信的方法。
- 公司带来的损失
- 短信一条5分钱,如果被大盗刷大家自己计算 邮箱通知不用钱,但被大盗刷,带宽、连接等都被占 用,导致无法正常使用
- 如何避免自己的网站成为”肉鸡“或者被刷呢
- 增加图形验证码(开发人员)
- 单IP请求次数限制(开发人员)
- 限制号码发送(一般短信提供商会做)
- 攻防永远是有的,只过加大了攻击者的成本,ROI划不 过来自然就放弃了
- Kaptcha 框架介绍
- 谷歌开源的一个可高度配置的实用验证 码生成工具
- 验证码的字体/大小/颜色
- 验证码内容的范围(数字,字母,中文汉字!)
- 验证码图片的大小,边框,边框粗细,边框颜色
- 验证码的干扰线 验证码的样式(⻥眼样式、3D、普通模糊)
高并发商品首页热点数据开发实战
- 热点数据
- 经常会被查询,但是不经常被修改或者删除的数据
- 首页-详情页
- 链路逻辑
- 检查缓存是否有
- 缓存不存在则查询数据库
- 查询结果放到缓存,设置过期时间
- 下次访问则命中缓存
- 接口开发
- 模拟数据库查询耗时200ms
- 未加缓存逻辑:controller-service-dao层
- 加缓存逻辑:controller-service-dao层
- 注意点
- 缓存击穿
- 缓存穿透
- 缓存雪崩
- 缓存和数据库数据一致性
Jmeter5.x压力测试工具
lable: sampler的名称
Samples: 一共发出去多少请求,例如10个用户,循环10次,则是 100
Average: 平均响应时间
Median: 中位数,也就是 50% 用户的响应时间
90% Line : 90% 用户的响应不会超过该时间 (90% of the samples took no more than this time. The remaining samples at least as long as this)
95% Line : 95% 用户的响应不会超过该时间
99% Line : 99% 用户的响应不会超过该时间
min : 最小响应时间
max : 最大响应时间
Error%:错误的请求的数量/请求的总数
Throughput: 吞吐量——默认情况下表示每秒完成的请求数(Request per Second) 可类比为qps、tps
KB/Sec: 每秒接收数据量
- 基于当前机器配置压测
- 当前架构存在的问题
-
分布式缓存和应用服务器网络需要内网通信
-
可以自己本地部署Redis进行测试
分布式锁核心知识介绍和注意事项
-
背景
-
避免共享资源并发操作导致数据问题
- 加锁
- 本地锁:synchronize、lock等,锁在当前进程内,集群部署下依旧存在问题
- 分布式锁:redis、zookeeper等实现,虽然还是锁,但是多个进程共用的锁标记,可以用Redis、Zookeeper、Mysql等都可以
-
设计分布式锁应该考虑的东西
-
排他性
- 在分布式应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行
-
容错性
- 分布式锁一定能得到释放,比如客户端奔溃或者网络中断
-
满足可重入、高性能、高可用
-
注意分布式锁的开销、锁粒度