Liu · Blog

记录点滴,成就未来

0%

1.业务需求

之前我们讨论过扣减库存的问题,下单减库存和支付减库存各自有一定的优势和缺陷,我们选择了下单减库存的方案。

订单创建之后,就会扣减库存,并且生成了支付的二维码,但是如果用户一直不支付,就会导致商品库存被占用,而不能形成有效交易,会损害商家的利益,流失真正的具有购买意向的客户。

因此,如果有客户下单超过一定的时间没有付款,我们必须关闭订单,释放库存。

那么问题来了,我们如何得知哪些订单时超时未支付的订单呢?

订单下单后,需要等待一段时间后再判断是否支付,到底是关闭还是继续。这样的延时执行的业务,称为延时任务

阅读全文 »

1.什么是分布式事务

我们已经完成了下单的业务,但是下单业务中会包含多个微服务的调用,例如:

  • 订单微服务:新增订单、订单详情、订单物流
  • 商品微服务:扣减库存
  • 优惠券服务:扣减用户优惠券

要了解分布式事务,必须先了解本地事务。

阅读全文 »

Spring MVC

返回数据时json处理忽略null字段

1
2
3
4
spring:
jackson:
default-property-inclusion: non_null
# 返回数据时json处理忽略null字段
阅读全文 »

1.介绍

1.1.什么是MongoDB ?

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

{name:””, age:””}

阅读全文 »

1.登录超时控制

一般登录状态都有一个超时时间,超过时间后登录状态会失效。目前我们给用户颁发的JWT令牌并未设置超时时间,也就是说用户只要不关闭浏览器,登录状态就一直有效

那么,我们该如何实现登录超时控制呢?

阅读全文 »

1.无状态登录原理

1.1.什么是有状态?

有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。

例如登录:用户登录后,我们把登录者的信息保1存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。

缺点是什么?

  • 服务端保存大量数据,增加服务端压力
  • 服务端保存用户状态,无法进行水平扩展
  • 客户端请求依赖服务端,多次请求必须访问同一台服务器
阅读全文 »

OpenResty渲染静态页

之前分析中,我们计划使用Nginx来完成静态页面模板的渲染,不过我们之前学习过Nginx的web服务器功能、反向代理功能、负载均衡功能。

但是如何利用Nginx查询Redis缓存?如何利用Nginx完成页面模板渲染?

nginx中有一个模块叫做ngx_lua,可以将Lua嵌入到Nginx中,从而可以使用Lua来编写脚本,这样就可以使用Lua编写应用逻辑,操作Redis、MySQL等等;这样就可以使用Lua语言开发高性能Web应用了。

那么OpenResty是什么呢?

阅读全文 »

3.WebFlux

是不是感觉Elasticsearch的异步API感觉很别扭,而且似乎没什么用处?

那是因为我们之前学习的所有Web程序组件,都是同步阻塞的编程方式。包括:Tomcat、Servlet、SpringMVC、Mybatis等等。

因此在同步阻塞运行大环境下,使用异步API,就难以发挥异步调用的长处。

同步和异步执行,到底有怎样的差异呢?

阅读全文 »