论述题08

8-1 分布式锁有哪些实现方式?redis是如何实现分布式锁的?讲一讲Redisson实现分布式锁的原理

分布式锁是一种用于协调多个节点之间并发访问共享资源的机制。在分布式系统中,由于多个节点共同竞争资源,可能导致数据不一致或冲突的问题。分布式锁通过保证在同一时间只有一个几点能够获取到锁来解决这个问题。

实现方式有很多,如:

1.基于MySQL的唯一约束

2.基于Redis的setnx key value

3.基于分布式协调框架:第三方组件Redisson(基于Redis实现的分布式协调框架)

Redisson实现分布式锁的原理

1.获取锁:分布式任务执行时,当多节点需要获取锁时,Redisson框架会根据hash算法选择一个节点并通过lua脚本加锁,并设置一个过期时间。如果成功获取到锁,就表示该节点获取到了对共享资源的独占访问权。

2.锁得续期:使用到了看门狗机制watch dog,获取到锁之后,几点会在锁过期时间内通过看门狗不断发送续期命令,防止锁在节点还在使用资源时被自动释放。

3.释放锁:如果要释放锁则删除mylock的那个key即可。

8-2 补充:介绍一下你们项目中的优惠券功能

07论述中已写的:

我们项目中优惠券功能涉及到两个操作端口,管理员端口和学生端口。

管理员端口,管理员可以在后台优惠券管理页面查看优惠券列表信息,在这个列表中可以完成优惠券的增删改查功能。

其中优惠券有立即发放、定时发放两种发放方式。只有处于暂停状态或者待发放状态的优惠券,在优惠券列表中才会出现发放按钮,可以被发放,并且优惠券发放限制了使用期限,可以按固定天数算也可以按固定时间段算。发放优惠券的主要业务就是更新优惠券的领取时间范围和使用时间范围,并且在发放优惠券的时候,如果判断优惠券的领取方式为指定发放并且优惠券处于待发放状态,需要基于线程池异步生成相应的兑换码。

领取方式也有两种,一种是在前段页面直接手动领取,另一种是通过输入兑换码的方式指定发放领取。如果优惠券未领取或未达到领取上限,则可以立即领取。如果优惠券已经领完,则展示已领完。如果用户已经领取优惠券,则展示去使用。我们设计了一个用户券表,来保存了哪个用户领取了哪张优惠券,和领取优惠券的使用情况,来判断用户是否领取了这个优惠券。

最终通过优惠券是否存在、优惠券是否在优惠券发放时间内、库存是否充足、是否达到优惠券每人限额数量等一系列校验,修改用户与优惠券之间表中字段状态,完成用户领取优惠券功能。如果是兑换码领取,还需校验兑换码的有效性。

补充的:

使用优惠券,用户每次购物支付时只能选择一张优惠券,可以根据优惠券的规则进行相应的优惠。

用户预下单使用优惠券生成订单时,会判断当前价格是否能满足优惠券的使用限制,不符合要求的优惠券不能使用。然后下单创建订单,并且核销使用掉的优惠券。走支付流程时,如果支付取消或支付失败则需要更新订单状态并退还优惠券。最后支付完毕可查询订单进度和已使用的优惠券信息。

你可能感兴趣的:(业务题,java)