失效问题处理:业务分析以及资料介绍| 学习笔记

简介: 快速学习失效问题处理:业务分析以及资料介绍。

开发者学堂课程【使用 Redis 消息队列完成秒杀过期订单处理 :失效问题处理:业务分析以及资料介绍】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/729/detail/13020


失效问题处理:业务分析以及资料介绍

 

内容介绍

一、业务流程

二、Java 程序实现

 

完成java 代码中获取 redis 的消息通知后,就可以使用 redis 的过期消息通知以及spring data redis 中的消息监听结合起来完成本次过期优惠券的处理。

 

一、业务流程

为了使得案例更加简单直观,业务流程分为两个部分。

1. 用户获取优惠劵

对于用户获取优惠券而言,只能根据程序进行模拟,所以采取手动创建一个优惠券保存到数据库中。

同时优惠券涉及到过期优惠券的处理,所以还需将优惠券同时保存到 redis 服务器中,给其设置一个失效时间,当其失效后借助 redis 中的机制自动发送通知。

保存到 redis 中后,因为其是一个 key 和 value 的缓存服务器,因而保存时 key 和 value 该如何取值需要明白,同时因为redis 中 key 的失效机制只会发送 key 的失效消息,所以还需要针对 key 的命名进行规范为 key(coupon:优惠券ID),同时案例中 value 并无实际用途,简写为优惠券ID即可。

  • 手动创建一个优惠券保存到数据库中
  • 同时保存到 redis 服务器中,同时设置失效时间
  • 由于 redis 中 key 的失效机制(只会发送 key 的失效消息):
  • Key(coupon:优惠券 ID)-value(优惠券 ID)

2. 过期优惠券的处理

过期优惠券的处理是通过 spring data redis 来做的,在之前也有过讲解,在此主要需要明确订阅的主题为keyevent@dbindex 即 key 的失效通知事件,可以变为@0表示将其放入0号数据库中。

配置消息的主题后还需要配置消息的监听器,在消息的监听器中需要获取到失效消息,从失效消息中分离出优惠券 id,而失效消息只会发送 key 的失效消息,所以失效消息的主体为 key:coupon :优惠券 id,获取之后就是查询数据库,同时修改优惠券状态。

  • 订阅的主题:__keyevent@0__:expired
  • 配置消息监听器

获取到失效消息(coupon:优惠券 id),从失效消息中分离出优惠券。

查询数据库,修改优惠券状态。

以上就是所有的处理逻辑。


二、java 程序实现

知晓业务逻辑后,可以看到如图有两个程序,其中 coupon-achieve 对应着用户获取优惠券;coupon-expired 是用来模拟过期优惠券的处理,在其中就用于处理过期优惠券。

图片5.png

同时因为其涉及了一些数据库表的操作,所以需要对数据库表有一定了解。此图中数据库表是为了模拟而做的一张数据库表。

其中含有 id,优惠券名称,金额,优惠券说明,获取时间和失效时间以及状态等等。

图片6.png

  • 建表语句如下:

Create Table

CREATE TABLE 't_coupon`(

`id` bigint(2RNOT NULL AUTO_INCREMENT COMMENT'主键',

'name ` varcha60) DEFAULT NOLL COMMENT'优惠券名称',

'money decima1 (10,0)DEEAULT NULL COMMENT '金额',

‘coupon_desc` varchar(128) DEEAULT NULL COMMENT'优惠券说明',

' create_time datetime DEFAULT NOLL COMMENT'获取时间',

'expire_time’ datetime DEFAULT NULL COMMENT'失效时间',

'state' int(1) DEEAULT NULL COM4ENT '状态。0-有效,1-己失效,2-己使用',PRIMARY KEY (id`)

)ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8

用户需要获取优惠券时就相当于向表中保存一条记录,接着再向 redis 服务器中存储一条记录,有了存储记录后,获取优惠券的操作就此结束。等待优惠券失效后,再借助 redis 的失效 key 机制,在第二个程序 coupon-expired 中获取到失效 key 再去处理优惠券。

图片7.png

了解完流程和数据库表后,为了演示方便,老师已经将底层代码准备好,代码主要是由 mybits 基础操作数据库的代码,其中都为简单的根据 id 查询,在此不做详细说明。

  • 简单 id 查询:

<select id="selectCouponById" resultMap="BaseResultNap" parameterType="Long">

selectinclude refid="Base_Column_List"/〉 from〈include refid="table" /> where id =#{id, jdbcType=BIGINT}</select>

  • 简单的保存:

〈insert id="saveCoupon”parameterType="cn.itcast.entity.Coupon"useGeneratedKeys="true" keyProperty="id">

insert into<include refid="table/> (name ,money , coupon_desc ,create_time,expire_time,state)

values ( #{name},#{ money} , #{ couponDesc} , #{createTime}, #{expireTime}, #{state})

</insert>

  • 简单的更新语句:

<update id="updateCoupon" parameterType="cn.itcast.entity.Coupon">

update <include refid="table/>

set name = #{name},

money = #{money},

coupon_desc = #{couponDesc},

create_time = #{ createTime},

expire_time = #{expireTime},

state = #{state,jdbcType=INTEGER}

where id = #{id,jdbcType=BIGINT}

</update>

最后以上操作无论是使用 mybits 框架还是 hibernate 框架以及原生 jdbc 操作都可以。

相关文章
|
缓存 并行计算 算法
MPI并行计算的基本介绍和使用
MPI并行计算的基本介绍和使用
1351 1
|
运维 安全 Linux
linux麒麟系统二级等保【三权分立策略】
linux麒麟系统二级等保【三权分立策略】
2216 0
|
11月前
|
人工智能 运维 算法
AI加持下的网络流量管理:智能调度还是流量黑洞?
AI加持下的网络流量管理:智能调度还是流量黑洞?
427 8
|
Java Nacos 数据安全/隐私保护
nacos启动问题之启动时连接报错如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
5280 97
|
SQL 运维 监控
DM日常运维高频命令总结
DM日常运维高频命令总结
447 3
|
安全 API Android开发
Android 中的FragmentManager
8月更文挑战第9天
491 1
|
网络协议 Python
python对tcp协议栈进行优化之一
**TCP优化摘要:** - MSS优化涉及调整TCP最大段大小,Python中可使用`socket.getsockopt()`查询MSS。 - Scapy是Python库,用于创建和发送网络包,可用于测试和优化协议栈性能。 - LwIP是轻量级TCP/IP协议栈,适合嵌入式设备,可通过分析和调整提升性能,特别是实时性和资源管理。
375 5
|
Python
Langchain使用OpenAI报错AttributeError: module ‘openai‘ has no attribute ‘error 的解决方案
这篇文章描述了作者在使用Python的`openai`和`langchain`库时遇到的错误,错误的提示是`AttributeError: module 'openai' has no attribute 'error'`。文章通过分析环境和版本信息,发现问题出在`langchain`库的版本过旧。作者通过卸载旧版本并安装指定版本的`langchain`库解决了问题,并总结了在遇到此类问题时检查和更新依赖库的重要性。
2693 2
|
消息中间件 存储 负载均衡
RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景
RocketMQ 5.0 架构解析:如何基于云原生架构支撑多元化场景
1595 110
|
缓存 网络协议 前端开发
CDN最佳实践之访问慢的分析思路和优化方案
使用CDN加速以后还是存在访问慢的情况,如何去分析定位问题、优化网站速度、解决用户问题是一个十分重要的课题。本文介绍了CDN加速访问慢的分析思路,通过归纳的一些原因结合搜集的信息去进一步判断定位问题,帮助用户在遇到问题时有一个更清晰的思考方法论。同时介绍了一些典型的问题场景,结合这些问题场景可以更快速的去发现问题并优化。
3066 1
CDN最佳实践之访问慢的分析思路和优化方案

热门文章

最新文章

下一篇
开通oss服务