Redis[2] redis 配置及分布式锁介绍

本文整理自小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是更好的选择
  • 操作
    • String结构
      • 存储字符串
      • 存储对象

案例实战之注册登录-图形验证码+谷歌开源Kaptcha引入

  • 背景
    • 注册-登录-修改密码一般需要发送验证码,但是容易被攻击恶意调用
    • 什么是短信-邮箱轰炸机
      • 手机短信轰炸机是批、循环给手机无限发送各种网站的注册验 证码短信的方法。
    • 公司带来的损失
      • 短信一条5分钱,如果被大盗刷大家自己计算 邮箱通知不用钱,但被大盗刷,带宽、连接等都被占 用,导致无法正常使用
  • 如何避免自己的网站成为”肉鸡“或者被刷呢
    • 增加图形验证码(开发人员)
    • 单IP请求次数限制(开发人员)
    • 限制号码发送(一般短信提供商会做)
    • 攻防永远是有的,只过加大了攻击者的成本,ROI划不 过来自然就放弃了
  • Kaptcha 框架介绍
    • 谷歌开源的一个可高度配置的实用验证 码生成工具
      • 验证码的字体/大小/颜色
      • 验证码内容的范围(数字,字母,中文汉字!)
      • 验证码图片的大小,边框,边框粗细,边框颜色
      • 验证码的干扰线 验证码的样式(⻥眼样式、3D、普通模糊)

高并发商品首页热点数据开发实战

  • 热点数据
    • 经常会被查询,但是不经常被修改或者删除的数据
    • 首页-详情页
  • 链路逻辑
    • 检查缓存是否有
    • 缓存不存在则查询数据库
    • 查询结果放到缓存,设置过期时间
    • 下次访问则命中缓存
  • 接口开发
    • 模拟数据库查询耗时200ms
    • 未加缓存逻辑:controller-service-dao层
    • 加缓存逻辑:controller-service-dao层
  • 注意点
    • 缓存击穿
    • 缓存穿透
    • 缓存雪崩
    • 缓存和数据库数据一致性

Jmeter5.x压力测试工具

  • LoadRunner

    • 性能稳定,压测结果及细粒度大,可以自定义脚本进行压测,但是太过于重大,功能比较繁多
  • Apache AB(单接口压测最方便)

    • 模拟多线程并发请求,ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载, 简单DDOS攻击等
  • Webbench

    • webbench首先fork出多个子进程,每个子进程都循环做web访问测试。子进程把访问的结果通过pipe告诉父进程,父进程做最终的统计结果。
  • Jmeter

    • 开源免费,功能强大,在互联网公司普遍使用
  • 压测工具本地快速安装Jmeter5.x

    • 需要安装JDK8 以上
    • 建议安装JDK环境,虽然JRE也可以,但是压测https需要JDK里面的 keytool工具
    • 快速下载 https://jmeter.apache.org/download_jmeter.cgi
    • 文档地址:http://jmeter.apache.org/usermanual/get-started.html
  • 热点数据接口压测

    • QPS: (Query Per Second): 每秒请求数,就是说服务器在一秒的时间内处理了多少个请求
  • 新增聚合报告:线程组->添加->监听器->聚合报告(Aggregate Report)

  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等都可以
  • 设计分布式锁应该考虑的东西

    • 排他性

      • 在分布式应用集群中,同一个方法在同一时间只能被一台机器上的一个线程执行
    • 容错性

      • 分布式锁一定能得到释放,比如客户端奔溃或者网络中断
    • 满足可重入、高性能、高可用

    • 注意分布式锁的开销、锁粒度

你可能感兴趣的:(备战2022实习,Redis,redis,分布式,数据库)