秒杀案例(上)系列文章目录

文章目录

  • 秒杀案例(上)系列文章目录
  • 分析
  • redis有5种数据类型,怎么选择用哪种数据类型?
  • 代码
  • 分析代码
  • 启动项目,有问题再微调

分析

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_数据类型

先分析一下,商品应该用什么数据类型来存储,redis五种数据类型使用哪种?

String类型可以满足吗

一个key 一个值 是String类型的

答案是,可以满足

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_eclipse_02


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_redis_03

redis有5种数据类型,怎么选择用哪种数据类型?

hash是用来存对象的,我们这里不需要
zset是有序的,我们这里不一定要有序
那么就是List和Set里面选择了
我们选择Set,为什么不选择List是因为我们的成功者成功抢到之后,就应该这个商品不能再抢了,因为已经秒杀到了
List不会帮我们去重,而Set可以帮助我们去除重复
所以最终选择了Set

代码

同样的,这块我们也提供了基础代码

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_redis_04

分析代码

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_redis_05


界面非常简单,就是一个按钮

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_redis_06


为什么一定要获取到用户的Id,因为我们必须要知道具体是哪个用户来进行的秒杀

用户Id和商品Id我们都要知道

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_List_07


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_redis_08


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_数据类型_09


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_数据类型_10


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_eclipse_11


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_redis_12


0或者是null都说明qtValue没有初始化过

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_数据类型_13

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_redis_14


这个时候大家想一想还有没有其它情况

比如用户,他秒杀成功之后会不会又重新进来秒杀一次

所以我们要做判断,每个用户只能秒杀一次

怎么判断用户是否秒杀成功过

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_数据类型_15


redis里面的Set数据类型有这个方法,根据key判断某个成员是否存在

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_List_16


现在还有其它的情况吗

商品我们判断了

用户我们判断了

按道理是不会有什么情况了

启动项目,有问题再微调

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_eclipse_17


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_数据类型_18


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_redis_19

redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_数据类型_20


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_eclipse_21


redis09_秒杀案例eclipse中使用redis【有问题,待重新整】_eclipse_22


这样就完成了

但是我们想一个问题,就是如果我们并发访问的时候会不会有什么问题呢?