项目学习--谷粒商城

1. 微服务搭建

本地安装虚拟机,静态IP划分和docker的使用
微服务功能模块介绍以及业务模块划分与抽取

2. 前端搭建

3. 后端业务代码完善

云储存OSS的整合与使用
JSR303校验以及自定义分组校验
统一异常拦截处理和返回json格式

4. Elasticsearch学习

Elasticsearch的基础使用
Elasticsearch字段match、嵌套聚合,字段类型mapping
分词器使用,结合nginx
Java代码整合Elasticsearch,完成业务数据封装后上传ElasticSearch建立索引

5. Nginx反向代理

域名先通过本地host文件映射到Nginx,Nginx将请求负载到业务网关,业务网关根据网关断言将请求分发到具体服务

6. 压力测试与JVM调优

QPS(Query ),TPS (Transport)概念了解
JMeter的使用,指定时间指定线程数对接口进行测试,以及测试结果观察
JVM了解,堆区gc流程:
  • 老年代
  • 新生代
  • 伊甸园区
  • 大GC,小GC
    在这里插入图片描述

7. 缓存-Redis

缓存穿透(一直查不存在的数据)–null结果缓存,并加入短暂过期时间
缓存雪崩(相同时间大批key失效)–原有失效时间的基础上增加一个随机值,减少集体失效的事件
缓存击穿(热点数据失效)–加锁
本地锁–synchronized
本地Redis锁-- set key nx ex
  • 设置过期时间,必须和加锁是同步的,原子的 (setIfAbsent)
  • 获取值对比+对比成功删除=原子操作 (Lua脚本)
  • 其他线程自旋锁
分布式Redis锁–Redisson
  • 阻塞式等待,默认加锁都是30秒 Rlock.lock()
    • 默认的lock方法会自动续期,使用看门狗机制,定时任务每1/3(10秒)的看门狗时间自动续期
    • 如果lock中指定了过期时间,则看门狗机制失效
  • 可重入锁:A方法拿到α锁,调用B方法,B方法也需要获取α锁,可重入锁允许B直接使用A的锁
  • 公平锁
  • 读写锁
    • 修改数据期间,写锁是一个排他锁(互斥锁),只要写锁存在,读锁就必须存在
    • 读锁是共享锁,在仅是读数据期间,好似无锁一样
  • 信号量 redisson.getSemaphore
  • 闭锁 countDownLartch
    • RCountDownlatch.await 等待指定数量的线程countDown(数量-1)以后,才继续执行后续代码
  • 缓存数据一致性
    • 双写模式–可能导致数据脏读,多个线程对同一个数据进行修改时,写缓存的顺序和修改数据库数据的时序不一致
    • 双写模式可以通过设置数据过期时间来达到最终一致性,当缓存里的错误数据过期后会重新从数据库缓存最新在正确的数据
      在这里插入图片描述

8. SpringCache

@Cacheable: Triggers cache population. 触发将数据保存到缓存的操作
@CacheEvict: Triggers cache eviction. 触发将数据从缓存删除的操作
@CachePut: Updates the cache without interfering with the method execution. 不影响方法执行
@Caching: Regroups multiple cache operations to be applied on a method. 组合以上多个操作
@CacheConfig: Shares some common cache-related settings at class-level. 在类级别共享缓存的相同
SpringCache的不足
  1. 读模式
  • 缓存穿透:查询一个null数据。解决: 缓存空数据 cache-null-values=true
  • 缓存击穿:大量并发进来同时查询一个正好过期的数据。解决:加锁 默认是不加锁的,加锁需要在@Cacheable里的 sync=true
  • 缓存雪崩: 大量的key同时过期。解决:加随机时间。
  1. 写模式 (缓存与数据库一致)
  • 读写加锁 (适用于读多写少的情况,如果写也多,效率会有影响)
  • 引入Cancal,感知mysql的更新去更新数据库
  • 读多写多的直接去查询数据库

9. 异步

线程的创建方式
  1. 继承Thread
  2. 实现Runnable接口
  3. 实现Callable接口 + FutureTask
  4. 线程池
线程池 Executors
异步编排 CompletableFuture

10. 盐值加密

11. SpringSession

社交登录
  1. 社交登录流程
    • 第3方社交登录开通、认证成功后的url
    • 社交认证成功会跳转到自定义的url,并携带一个code参数
    • 拿着这个code可以访问社交登录网站开放的api接口,获取用户的信息,进行注册
  2. 分布式session解决方案
    • SpringSession配置
    • Session的Domain设置解决session作用域的问题
      • 每一个服务都引入SpringSession
      • SpringSession会使用Filter拦截所有的请求
      • 通过SpringSession设置请求的session作用域(一般设置为顶级域名)
单点登录
  1. 为了解决不同顶级域名之间的session共享,需要使用单点登录
  2. 需要一个单独的认证服务,用于多个顶级域名不同的系统之间认证
  3. 当访问其中一个系统时,会检查当前用户是否登录,如果未登录,会自动跳转到单独的认证服务进行登录认证,并携带认证完成需要重定向返回页面url
  4. 认证完成,会重定向到指定的页面,并将生成的token返回给业务系统
  5. 后续业务系统的任何请求,都会携带该token,从而跳过认证过程,直接获取资源
    参考
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值