谷粒商城所学知识点整理总结
环境搭建
- 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
如果存储的是自定义类对象