失效问题处理:模拟获取优惠券| 学习笔记

简介: 快速学习失效问题处理:模拟获取优惠券。

开发者学堂课程【使用 Redis 消息队列完成秒杀过期订单处理 :失效问题处理:模拟获取优惠券】学习笔记,与课程紧密联系,让用户快速学习知识。

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


失效问题处理:模拟获取优惠券

 

内容介绍

一.编写测试类

 

上章介绍了优惠券失效问题的业务流程处理规则,本章在获取优惠券的代码中 java 中编写测试代码,以此来模拟用户来获取优惠券。

 

一.编写测试类

1.过程

首先在 java 包下新建一 个 CouponTest 优惠劵测试类,将其放置到 cn.itcast.coupon.test 包下。在其中进行获取优惠券,以及将其保存到数据库和 redis 服务器中的过程。

图片14.png

由于所有的内容都交给 spirng 容器来进行配置,所以采用 spring 相关的单元测试环境,同时再添加一个加载配置文件 locations,在 resources 下都已经准备完成,其中配置了数据库的基本信息,以及引入了 redis 的其他配置文件。

图片15.png 

  • CouponTest.java 代码如下:

package cn.itcast.coupon.test;

import org.junit.runner.Runwith;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.Spring]Unit4ClassRunner;

//采用 spring 相关的单元测试环境

@Runwith(SpringJUnit4ClassRunner.class)

//引入配置文件路径

@ContextConfiguration(locations="classpath:applicationContext.xml")

Public class CouponTest{

//因为在其中涉及到了数据库和 Redis 服务器的操作,所以需要依赖注入以下内容

//@Autowired 为注入,在此使用的是 mybits 框架,定义一个 CouponMapper,注入增删改查操作

@Autowired

private CouponMapper coupoMapper;

//注入定义的 RedisTemplate,参数皆为 String 类型

@Autowired

private RedisTemplate<String,String> redisTemplate

/**

*1.模拟一个优惠券,即创建一个优惠券

*2.保存到数据库中

*3.保存到 redis 服务器中,设置超时时间

*/

//编写测试,获取优惠券,出现报错后导包即可

@Test

Public void testGetCoupon(){

//流程1.手动 new 一个优惠券,设置参数2.保存到数据库中3.最后在放在 redis 服务器中,去设置它的超时时间

//获取优惠券的时间

Data now =new Date();

//优惠券的超时时间:1分钟

int timeOut =1;

//自定义一个优惠券,相当于 new 一个新对象

Coupon coupon=new Coupon();

//逐个设置属性,通过对象名+.的形式挨个设置,其中id在数据库中设置的为逐个自增,不需要设置

//设置名称,为测试优惠券

coupon.setName("测试优惠券");

//设置金额

coupon.setMoney(BigDecimal.ONE);

//设置购物券描述

coupon.setCouponDesc("全品类优惠券1元");

//设置购物券获取时间,为 now

coupon. setCreateTime(now);

//设置购物券过期时间,通过调用工具类 DataUtils.addTime 方法,将 now(当前时间)和 timeout(需要增加的分钟)两个参数传入。因为设置的优惠券失效时间为1分钟,所以过期时间应为当前时间+1即可。

//设置优惠券的失效时间

Coupon.setExpireTime(DataUtils.addTime(now,timeOut));

//设置刚获取优惠券的状态,0表示有效

Coupon.setState(0);

//使用 mybits 将优惠券保存到数据库中

couponMapper.saveCoupon(coupon);

//将优惠券设置到 redis 缓存中,并且设置超时时间,在此需要使用 redisTemplate 操作,同时注意 String 类型需要使用 opsForValue()方法,同时 Set 方法采用 set(key,value,timeout,unit)帮助将优惠券信息存入缓存中。

要采用 key 来做失效通知功能,所以 key 只是采用之前固定的规则,coupon:+ 优惠券 id,value 属性并没有真正使用,和 key 值一致即可。timeout 为失效时间,unit 为时间的单位,因为设置到服务器后可能是1小时/一天失效,所以需要指定时间单位,在此设置为一分钟

redisTemplate.opsForValue().set(“coupon:”+coupon.getId(),coupon.getId()+””,timeOut,TimeUnit.MINUTES);

}

}

到此已经成功保存了一条优惠券的记录到数据库中,同时也将其放到了 redis 缓存中,同时还设置了它的失效时间,为一分钟。

2.验证测试类

图片16.png

右键 Run As 执行编写完的测试程序,会看到数据库中出现一条 id 为9,state 状态为0的记录,同时显示的时间也对应着当前时间。则说明成功。

图片17.png

最后再打开 redis 客户端,输入命令:keys *,就可以看到与数据库一致的 coupon:9 优惠券数据信息。

再输入命令:ttl coupon:9 查看其的超时时间,就会显示当前剩余的时间。就说明整个过程没有问题。

相关文章
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
33_ LLM的定义与规模化:参数与计算力
在人工智能发展的长河中,2022年底ChatGPT的横空出世标志着大语言模型(LLM)时代的正式开启。自那时起,LLM技术以惊人的速度演进,从实验室走向产业应用,重塑着人类与计算机的交互方式。到2025年,全球LLMs已正式进入"模型即服务"(MaaS)时代,参数量级突破万亿级,成为驱动数字经济发展的核心引擎
1256 0
|
人工智能 自然语言处理 API
研究大模型门槛太高?不妨看看小模型SLM,知识点都在这
大型语言模型(LLM)在文本生成、问答等领域表现出色,但也面临资源受限环境应用难、领域知识不足及隐私问题等挑战。为此,小型语言模型(SLM)逐渐受到关注,其具备低延迟、成本效益高、易于定制等优点,适合资源受限环境和领域知识获取。SLM可通过预训练、微调和知识蒸馏等技术增强性能,在自然语言处理、计算机视觉等领域有广泛应用潜力。然而,SLM也存在复杂任务表现有限等问题,未来研究将进一步提升其性能与可靠性。 论文链接:https://arxiv.org/abs/2411.03350
679 5
vscode——如何开启Edge进行调试
vscode——如何开启Edge进行调试
639 4
vscode——如何开启Edge进行调试
|
消息中间件 存储 算法
这些年背过的面试题——实战算法篇
本文是技术人面试系列实战算法篇,面试中关于实战算法都需要了解哪些内容?一文带你详细了解,欢迎收藏!
|
存储 Ubuntu Linux
如何在 Ubuntu 12.04 上使用 Apache 配置 WebDAV 访问
如何在 Ubuntu 12.04 上使用 Apache 配置 WebDAV 访问
549 0
|
弹性计算 智能网卡 网络安全
一文带你了解阿里云云网络的十年演进之路
伴随着大型和超大型企业陆续上云,更丰富行业场景和更多样的服务运行在阿里云上,对云网络的规模、性能、弹性提出了更极致的要求,驱使着云网络不断持续优化,从经典网络到专有网络,控制面从1.0到3.0,数据面从内部服务去网关,边界网关硬件化,全面拥抱智能网卡,再到业务网元虚拟化,走上一条“螺旋”上升的路线。
|
JSON API 开发工具
postman介绍、安装、使用、功能特点、注意事项
postman介绍、安装、使用、功能特点、注意事项
|
Linux 网络安全 文件存储
本地部署Jellyfin影音服务器并实现远程访问影音库-1
本地部署Jellyfin影音服务器并实现远程访问影音库
1245 0
|
SQL 监控 Java
Mycat - 数据库分库分表中间件,国内最活跃的、性能最好的开源数据库中间件!
Mycat是什么 Mycat - 数据库分库分表中间件,国内最活跃的、性能最好的开源数据库中间件! 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替...
3399 107