10、Redis在秒杀场景的应用

一、秒杀场景的特性

1、顺时并发流量非常高

        当有大量并发请求涌入秒杀系统时,可以使用Redis的高性能、高并发特性,先拦截掉大部分请求,避免大量请求直接发送给数据库,把数据库给压跨。

2、读多写少,读操作是简单的查询操作

        在秒杀场景下,用户需要先检查商品是否有库存,只有库存有余量时,秒杀系统才能进行库存扣减和下单操作。库存查验操作是典型的键值对查询,Redis对键值对查询的高效支持,正好和 这个操作要求相匹配。

二、基于原子操作支撑秒杀场景

        在秒杀场景中,一个商品的库存对应了两个信息,分别是总库存量和已秒杀量。这种数据模型正好是一个key(商品ID)对应两个属性关系,所以我们可以使用一个HASH键值类型来保存:

key:itemID
value:{total:N, ordered:M}

        库存查验和库存扣减这两个扣作要保证原子性,可以直接使用Redis原子操作。因为有查询、扣减两步操作,无法用一条命令完成,所以我们需要使用Lua脚本原子性的执行这两个操作。如下所示:

#获取商品库存信息            
local counts = redis.call("HMGET", KEYS[1], "total", "ordered");
#将总库存转换为数值
local total = tonumber(counts[1])
#将已被秒杀的库存转换为数值
local ordered = tonumber(counts[2])
#将当前秒杀数量转换为数值
loca
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值