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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 快速学习失效问题处理:模拟获取优惠券。

开发者学堂课程【使用 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 查看其的超时时间,就会显示当前剩余的时间。就说明整个过程没有问题。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
存储 SQL 缓存
大厂的优惠券系统是如何设计的?
1 Scenario 场景 电商系统的促销手段(Electronic Commerce Systems): 优惠券 拼团 砍价 老带新
1321 0
教你年入100万,互联网赚钱三板斧!
一百万并不是一个值得炫耀的数字,但是对于大多数人来说,人生第一个一百万却是非常重要的! 随着移动互联网的发展,2015年,网络赚钱势必又会呈现井喷的情景。而进入互联网和移动互联网掘金的人也会越来越多!但是,对于大多数人来说,网络赚钱在脑海里还只是一个模糊的概念,那么接下来这篇文章带你学习互联网赚钱三板斧!至少让你少走三年弯路! 网络上你到底应该怎么赚钱呢? 1、找到一群有痛苦的人; 2、帮这群人搞定解决方案; 3、把痛苦的人和解决方案对接起来。
1886 0
|
安全 小程序 搜索推荐
HTTPS证书是什么?
HTTPS证书准确来说是SSL证书(安全套接字层)或数字证书负责在您的网站和访问者浏览器之间创建安全连接。它确保网站和浏览器之间传递的所有数据保持私密和安全。当您使用SSL加密时,黑客将无法窃取您的私人信息,包括信用卡和借记卡号码、登录详细信息。
879 0
HTTPS证书是什么?
|
9月前
|
缓存 数据安全/隐私保护 Windows
ECDSA host key for ... has changed and you have requested strict checking.Host key verification fail
ECDSA host key for ... has changed and you have requested strict checking.Host key verification fail
|
9月前
|
存储 安全 算法
【PHP开发专栏】PHP加密与解密技术
【4月更文挑战第29天】本文探讨了PHP中的加密解密技术,涵盖基本概念如对称加密(AES、DES)、非对称加密(RSA、DSA)和哈希函数(MD5、SHA)。PHP提供内置函数支持加密,如`openssl_encrypt`、`openssl_pkey_new`、`hash`和`password_hash`。文章强调了最佳实践,如使用安全密钥、密钥管理和HTTPS,并给出用户注册登录的加密实战示例。通过理解和应用这些技术,开发者能增强Web应用的数据安全性。
256 1
|
安全 Linux Anolis
带你读《2022龙蜥社区全景白皮书》——5.8.1 龙蜥操作系统漏洞管理
带你读《2022龙蜥社区全景白皮书》——5.8.1 龙蜥操作系统漏洞管理
340 14
|
9月前
|
运维 数据挖掘 测试技术
如何评估数据库的成本效益
【5月更文挑战第21天】 如何评估数据库的成本效益
149 3
|
5月前
|
负载均衡 网络协议 安全
DNS解析中的Anycast技术:原理与优势
【9月更文挑战第7天】在互联网体系中,域名系统(DNS)将域名转换为IP地址,但网络规模的扩张使DNS解析面临高效、稳定与安全挑战。Anycast技术应运而生,通过将同一IP地址分配给多个地理分布的服务器,并依据网络状况自动选择最近且负载低的服务器响应查询请求,提升了DNS解析速度与效率,实现负载均衡,缓解DDoS攻击,增强系统高可用性。此技术利用动态路由协议如BGP实现,未来在网络发展中将扮演重要角色。
366 0
|
9月前
[Halcon&笔记] 特征选择中的常用特征总结
[Halcon&笔记] 特征选择中的常用特征总结
323 0

热门文章

最新文章