B2C商城项目笔记
文章平均质量分 60
越学习越无知
本人是一名刚入编程世界的小白,喜欢在博客上分享自己学习的理解,博客中如果哪里没写对欢迎在留言区留言
展开
-
分布式事务
本地事务在分布式下的问题 远程服务假失败: 远程服务其实成功了,由于网络故障等原因没有返回,将导致订单(主线程)服务回滚,而调用的远程服务(库存)却扣减 远程服务执行完成,下面的其他方法出现问题,将导致上面已执行的远程请求不能回滚,因为本地事务不能锁定远程服务的事务 本地事务 数据库事务的几个特性:原子性(Atomicity)、一致性(Consisstency)、隔离性(isolation)和持久性(Durabilily),简称就是ACID 原子性:一系列的操作整体不可拆分,要么同时成功,要么同时失败原创 2021-06-15 22:28:32 · 110 阅读 · 0 评论 -
关于订单服务
订单服务 电商系统涉及到3流,分别是信息流、资金流、物流,而订单系统作为中枢将三者有机的集合起来。 订单模块是电商系统的枢纽,在订单这个环节上需要获取多个模块的数据和信息,同时对这些信息进行加工处理后流向下个环节,这一系列就构成了订单的信息流通。 幂等性 feign远程调用丢失请求属性问题 -在调用feign方法时会调用feign底层的实现 @Override public Object invoke(Object proxy, Method method, Object[] args)原创 2021-06-15 22:27:36 · 373 阅读 · 0 评论 -
关于消息队列
消息队列 RabbitMq介绍 类型 点对点式:消息只有唯一的发送者和接受者,但并不代表只能有一个接受者,可以很多接受者监听队列,只是只有一个可以接受到消息 发布订阅式:可以由多个接受者监听这个队列,并且他们都可以收到消息 JMS(Java Message Servie) 定义:JavaApi 不跨语言 不跨平台 基于jvm消息代理的规范,是一种协议 ActiveMQ HornetMQ是JMS的实现 AMQP(Advanced Message Queuing Protocol) 网络线级协议原创 2021-06-15 22:26:00 · 69 阅读 · 0 评论 -
SpringSession原理
Session原理 浏览器第一次访问服务器,登录成功后服务器会保存一个session对象(可看成map对象),session对象里以键值对的方式保存了用户的登录信息,并且每一个session对象都会对应一个独特的sessionId 登录成功后服务器会返回一个JsessionId=xxx的Cookie给浏览器,浏览器下次访问时带上这个cookie,服务器就可以根据sessionid判断用户有没有登录。 session共享问题 服务器发回来的cookie默认作用域domain是本服务器域名,例如让认证服原创 2021-06-15 22:24:54 · 677 阅读 · 0 评论 -
额外的知识了解
验证码与接口防刷 前端需要实现倒计时功能,防刷 var num = 60; function timeoutChangeStyle() { $("#sendCode").attr("class","disabled") if(num == 0){ num = 60; $("#sendCode").attr("class",""); $("#sendCode").text("发送验证码"); }else{ var str = num + "s 后再次发送"; $("#sendCode").text(str)原创 2021-06-15 22:23:54 · 96 阅读 · 0 评论 -
异步编排与多线程
异步 初始化线程的4种方式 继承thread 实现Runnable接口 实现Callable接口+FutureTask(可以拿到返回结果,可以处理异常)jdk1.5后添加的 可以将Callable转化为Future Future内部继承Runable接口 线程池 定义一个配置类,改配置类向容器中注入一个threadPoolExecutor `@Configuration public class MyThreadConfig { @Bean public ThreadPoolExe原创 2021-06-15 22:22:23 · 323 阅读 · 0 评论 -
关于分布式锁
分布式锁 所有服务可以去一个公共的地方**“占坑“**,可以去数据库,也可以去redis,当占坑成功后,其他服务会判断有没有坑位,若已经被占了,则等待坑位,等待可以采取自旋的方式。 redis命令: set k v NX redisTemplate相关的api setIfAbsent() 设置过期时间加锁成功 获取数据释放锁 [分布式下必须是Lua脚本删锁,不然会因为业务处理时间、网络延迟等等引起数据还没返回锁过期或者返回的过程中过期 然后把别人的锁删了] ** redisson原创 2021-06-15 22:19:18 · 80 阅读 · 0 评论 -
关于高并发下的缓存
高并发下缓存问题 缓存穿透:指查询一个不存在的数据,由于缓存不命中,将去查询数据库,但是数据库也没记录,并且没有将这次查询的null写入缓存,这将导致整个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义 布隆过滤器 //ToDo 可以利用每个请求更换不同id继续缓存穿透,也将导致数据库瞬时压力增大 风险:利用不存在的数据进行攻击,多并发下数据库瞬时压力增大,最终导致数据库崩溃 解决方案:null结果缓存,并加入短暂过期时间 缓存雪崩:指在我们设置key时采用了相同的过期时间,导致原创 2021-06-15 22:17:35 · 544 阅读 · 0 评论 -
nginx 静态资源转发 负载均衡 反向代理
nginx配置文件简单笔记 nginx.conf 可参照https://blog.csdn.net/weixin_42167759/article/details/85049546 redis 引入spring-boot-starter-data-redis 简单配置redis的host等信息 使用springboot自动配置的redisTemplate操作redis相关操作 ...原创 2021-06-15 22:14:17 · 113 阅读 · 0 评论 -
ElasticSearch部分
ES笔记 基础概念 index type documention相当于数据 json数据 attribute 倒排索引 分词 相关性得分 List item List item QueryDSL terms查询非text的,要分词的都查不了 match查分词的 Aggregations text类型:会分词,先把对象进行分词处理,然后再再存入到es中。 当使用多个单词进行查询的时候,当然查不到已经分词过的内容! keyword:不分词,没有把es中的对象进行分词处理,而是存入了整个对象! 这时原创 2021-06-15 22:09:55 · 64 阅读 · 0 评论