商品定时上下架的另一种解决方案,无需定时任务和额外控件,纯逻辑处理,效率高且消耗低

目录

前言:

方案解决:

一、定义商品状态:

二、必须满足条件:

三、业务逻辑处理方式:

四、代码例子:


前言:

        这段时间创业,开发类似于电商平台的系统,遇到定时上下架的问题,网上查了很多资料都是定时任务方案解决,我觉得非常差劲。所以通过思考研究后,想到了该方案。目前大部分的解决方案都是主动将商品的状态改变。无论是定时任务轮询数据库中的商品,还是redis缓存有效期,或者是其他等等。无一例外都是主动操作。这种方式的效率低,消耗大,不灵活,而且定时上架时间还不准。像淘宝这样的数据量,有N个商家,商家又会有最少几十种商品。如果通过定时任务轮询将商品状态改变为上架的话,根本不能保证效率,而且性能消耗极高。所以我就研究出另一种定时上下架的方案,就是被动定时(我暂时这么命名)。如果我没猜错,淘宝应该也是这种方式。

        如果这个方案有什么疑问或者问题,麻烦在下面留言,我们一起解决。后续有更多关于电商方面的技术开发方案解决,我都会免费贡献出来。有问题希望留言

方案解决:

一、定义商品状态:

上架(出售)、定时上架(伪上架)、下架(仓库)

二、必须满足条件:

1.已上架的商品不支持定时上架设置
2.某个商品或批量商品定时上架设置后,商品处于伪上架功能。且商品不能立即上架,除非先下架
3.被下架的商品不受定时任务管理,但是可以手动再上架或定时上架

三、业务逻辑处理方式:

每次查询某个商品或商品列表(商品列表查询肯定是分页的,所以一次性的量肯定不会特别大)

搜索引擎的就不用说了,一样的

如果只是单独的定时上架,不含下架的话,可以先有逻辑,再通过定时任务慢慢修改状态,或者就直接使用这种逻辑就可以。无需管数据库种的状态如何

(1)、未到上架时间逻辑处理
        通过sql脚本或者代码判断当前时间和上架时间,
        如果当前时间小于上架时间就直接将商品状态返回为伪上架状态
  
(2)、已到上架时间,未到下架时间逻辑处理    
     通过sql脚本或者代码判断当前时间和上架时间,
     如果当前时间大于等于且小于下架时间,直接将商品状态返回为上架状态
                          
(3)、已到下架时间逻辑处理
     通过sql脚本或者代码判断当前时间和下架时间,
     如果当前大于等于下架时间,直接将商品状态返回为下架状态

四、代码例子:

假设:商品状态,1-上架,0-下架,2-定时上架下架

if (vo.getShelfStatus()==2){
	//当前时间大于等于自动上架时间,则为上架状态,否则是定时上架下架状态
	vo.setShelfStatus(new Date().compareTo(vo.getAutoShelfTime())>-1?1:vo.getShelfStatus());
	//当前时间大于等于自动下架时间,则为下架状态,否则是上架状态
	vo.setShelfStatus(new Date().compareTo(vo.getAutoSoldTime())>-1?0:vo.getShelfStatus());
}

基于以上三种逻辑判断,都是围绕伪上架状态展开的,所以只要是伪上架状态,就可以判断时间就行。如果是人为手动操作上下架,就直接满足上面说的三个条件即可。

无论是业务逻辑处理,还是数据展示,这种方案都是没有任何问题,无非就是对这种定时判断多了一点逻辑代码。
     

猜你喜欢

转载自blog.csdn.net/Qensq/article/details/131446919
今日推荐