我们的基本数据
并发1~2万
同时在线4~5万用户
日活跃用户10万
学习完秒杀业务,我们能具备处理一般高并发业务的基本逻辑
下面我们要做的是准备工作
除了基本的CRUD之外
我们还要做一些缓存预热工作
秒杀模块是mall-seckill,这个模块 *** 作的数据库是mall-seckill
数据库中包含秒杀spu信息和秒杀sku信息以及秒杀成功记录
我们要利用Quartz周期性的将每个批次的秒杀商品,预热到Redis
所谓"预热"就是将即将出现高并发查询的数据提前保存在Redis中
我们的业务只是将每个商品的库存数保存在Redis即可
mall-seckill-webapi项目
创建mapper包,创建SeckillSpuMapper
代码如下
SeckillSpuMapperxml文件添加内容
创建包serviceimpl
包中创建SeckillSpuServiceImpl实现ISeckillSpuService
创建controller包
创建SeckillSpuController类
下面可以测试
NacosRedisSeata
服务需要依次启动
LeafProductpassportseckill
测试10007秒杀端口号
正常配置登录JWT
我们将秒杀的商品Spu列表查询出来
当用户选择一个商品时
我们要将这个商品的sku也查询出来
也就是根据SpuId查询Sku的列表
创建SeckillSkuMapper
SeckillSkuMapperxml文件添加内容
根据给定时间查询出正在进行秒杀的商品列表
首先保证数据库中的seckill_spu表的数据正在秒杀时间段(检查数据,如果不在秒杀时间段,将结束时间后移如2024年)
SeckillSpuMapper添加方法
SeckillSpuMapperxml
这次查询主要是因为后面我们要学习的布隆过滤器,方式缓存穿透使用的
SeckillSpuMapper,添加一个方法
SeckillSpuMapperxml
我们要使用Quartz调度工具完成任务调度
按照秒杀的批次在秒杀开始前很短的时间内进行进行缓存预热工作
例如每天的12:00 14:00 16:00 18:00进行秒杀
那么就在 11:55 13:55 15:55 17:55 进行预热
1我们预热的内容是将参与秒杀商品的sku查询出来,根据skuid将该商品的库存保存在Redis中
2在秒杀开始后,当有用户查询秒杀商品后,将该商品保存在Redis中,还要注意防止雪崩(有效时间添加随机数)
3(待完善)在秒杀开始前,生成布隆过滤器,访问时先判断布隆过滤器,如果判断商品存在,再继续访问
利用Quartz将库存和随机码保存到Redis
1创建Job接口实现类
2创建配置类,配置JobDetail和Trigger
在seckill包下创建timerjob包
包中创建SeckillInitialJob类
代码如下
上面的类中的代码只是编写了
我们需要在Quartz中触发才能生效
我们创建timeconfig包
包中创建QuartzConfig类编写Job的触发
启动NacosRedisSeata
项目启动Leafproductseckill
上面章节我们完成了缓存预热
下面要根据SpuId查询正在秒杀的商品
和普通的SpuId查询商品详情相比
它的业务判断更复杂
1布隆过滤器判断(后期完成)
2判断商品是否在Redis中
3判断要购买的商品是否在秒杀时间段内
4如果一切正常在返回详情信息前,要为url属性赋值,其实就是固定路径+随机码
在SeckillSpuServiceImpl类中编写新的方法
上次课完成了查询根据SpuId查询Detail详情的业务逻辑层
下面开发控制层
SeckillSpuController添加方法
启动测试
NacosSeataRedis
LeafProductSeckillpassport
>您好,要保证用户的时间一致,前端商城的秒杀活动可以采用以下几种方法:
1 采用服务器时间来保证时间的一致性,即所有用户都使用服务器的时间,以确保每个用户的时间一致。
2 采用客户端时间来保证时间的一致性,即所有用户都使用客户端的时间,以确保每个用户的时间一致。
3 采用网络时间来保证时间的一致性,即所有用户都使用网络时间,以确保每个用户的时间一致。
4 采用定时器来保证时间的一致性,即所有用户都使用定时器来记录时间,以确保每个用户的时间一致。
此外,还可以采用一些技术手段,如采用缓存技术来减少服务器的压力,以确保每个用户的时间一致。
总之,前端商城的秒杀活动可以采用以上几种方法来保证用户的时间一致,以确保活动的顺利进行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)