谷粒商城所学知识点整理总结


 

环境搭建
  • Mysql
  • Redis
  • ES
    • 配置IK分词器
    • 配置ik分词
  • Nginx
  • Kibana
  • RabbitMQ
  • 阿里云免密登陆
    • Cloud与AlibabaCloud组件、SpringBoot版本关系
  • 预检请求与跨域解决
  • 配置中心
  • 知识点
    • 远程调用
      • Feign远程调用会丢失请求头
      • 异步编程丢失请求头
    • JSR303数据校验
    • Mybatis-Plus 实体类相关
      • 逻辑删除
      • 属性为空时不显示此属性
      •  主键为自己输入,非自增
      • 时间属性设置为自动填充
    • 域名原理
    • OSS对象存储
    • 异步线程
      • 使用
      • 配置
      • 使用案例
    • 密码加密
    • OAuth2.0
    • Session数据共享
      • Session复制(不推荐)
      • 客户端存储(不推荐)
      • Hash一致性
      • 将数据存入中间件(推荐)
    • 购物车
    • 消息队列
      • 特点
      • 消息可靠性
      • 消息幂等性
      • 消息积压
      • 延时队列
    • 分布式事务
      • 2PC模式(刚性事务)
      • Seata
      • 最终一致性(柔性事务)
    • 支付
      • 加密算法
      • 收单
    • 定时任务
      • Cron表达式
      • 使用
      •  Spring 中的特点
      • 阻塞解决
    • 异步任务
      • 配置
    • Sentinel 熔断降级限流
      • 使用配置
      • 实时监控、界面可视化
      • 流控
      • 降级
      • Feign熔断
      • 总结
    • Sleuth 链路追踪
      • 基础配置
      • Zipkin可视化配置
      • 链路数据持久化
  • 其他
    • 手动发送Post请求
    • Model、RedirectAttributes 传值
    • 将return 的数据作为Html数据展示
    • 项目注意
    • LocalDate 使用
    • UUID与雪花算法生成ID、自增ID
    • 启动Jar 包
    • 数据库性能
    • 远程调用转成想要的类型
      • 非json格式的请求体数据不能使用requestBody来获取
  • 文章正文:

    ??回到顶部版本说明

    ??回到顶部??回到顶部

    其他

    手动发送Post请求

    HttpResponse httpResponse = HttpUtils.doPost("https://api.weibo.com", "/oauth2/access_token", "post", new HashMap<>(), map, new HashMap<>());

    Model、RedirectAttributes 传值

    1、redirectAttributes 存储的数据可以在重定向后的页面使用。Model存储的数据只能用于请求转发

    2、redirectAttributes.addFlashAttribute("errors",errorMap); // 原理是将数据保存在cookie里重定向

    3、model.addAttribute、redirectAttributes.addAttribute发出的请求会将数据放在URL的?后面,可以直接通过@RequestParam 获取(重定向,请求转发)。

    将return 的数据作为Html数据展示

    pay:

    项目注意

    1、  单一模块:因为秒杀往往伴随着高并发,所以应该涉及为一个单独的模块,这样即使流量过大导致服务器瘫痪也只不会影响其他模块。同时秒杀的商品消息,库存都已经存储在redis,避免高并发访问数据库

    2、  链接加密:对秒杀请求的链接加密,防止恶意攻击(项目使用了秒杀随机码)

    3、  库存预热:避免进行数据库操作,防止数据库崩溃,使用redis的信号量替代库存

    4、  动静分离:静态资源不需要访问后台服务器,减少服务器压力

    5、  恶意请求拦截:对于某个ip同时发送的上千次请求直接进行拦截,不进行处理

    6、  流量错峰:将流量分担到更大的时间段上,比如增加验证码验证

    7、  限流、熔断、降级:限流。前端点击一次抢购后需要等待几秒才能点第二次,后端在并发量达到一定次数后对一定比率的请求进行处理。熔断。某一部分发生异常后不再继续执行,直接返回失败消息如远程调用,如果一秒内有多个请求都请求超时,那么随后的请求执行到这就直接返回错误消息,不再执行远程调用(是一种主动的方式)。降级。将一部分请求降级,等待一段时间后才去处理(或者直接返回异常)

    8、  队伍削峰。将一些不需要强一致性的数据操作放入队列中处理。如商品库存的扣减,先通过信号量来扣除,然后又队列慢慢去数据库修改库存

    LocalDate 使用

    UUID与雪花算法生成ID、自增ID

    UUID:优点:1、简单,生成性能快,2、唯一。数据库合表可以不需要担心主键冲突问题

                      缺点:没有顺序,数据库新增、查询、遍历效率低

    雪花算法:优点:1、生成效率高。2、同时根据时间生成ID,所以是递增,查询、插入、遍历效率也高3、同时是唯一,在合表也不需要担心主键冲突

                              缺点:因为是通过时间来生成的,当时间回溯时,可能会生成同一个主键

    自增ID:优点:简单

                      缺点:1、当生成的并发量大时,对数据库压力会变高 2、在合表时会比较麻烦 3、强依赖数据库,当数据库宕机后就无法实现

    启动Jar 包

    java -jar jar包名 --server.port=端口号

    数据库性能

    1、多张表查询时尽量不要使用 in ,效率很低。

    2、大表之间,如果查询的条件列有索引,那么没必要进行联表查询,因为连接查询会进行笛卡尔积次数的遍历,效率反而没有单表多次查询效率高(前提是大表,且有索引)。

    远程调用转成想要的类型

    1、在使用feign返回的Result数据里获取传过来的数据时,不要强转(目前已知Map在强转时会将Long转成String类型),正确做法应该使用阿里的TypeReference:

    如果存储的是自定义类对象

    非json格式的请求体数据不能使用requestBody来获取