在电商系统中会存在这样一种业务场景,在后端管理系统中设置商品,比如:

在前端H5界面、小程序、APP之类的展示这些已上架的商品对吧, 这样的场景并不一定要求是实时的或者说一定要达到秒级这样的对吧,有个几秒钟的延时也很正常。

所以基于定时上下架的场景有几种解决方案(我想到的哈,有不足的地方或者大佬还有更好的方式欢迎指导,小弟感激不尽):

1、最常规的:定时任务轮询嘛对吧。

关于单机定时任务,可以看一下这篇文章:https://www.jianshu.com/p/7fc2e3834899

关于分布式系统的话,我们用的是elastic-job:https://www.jianshu.com/p/4dc449cdeb67

因为每家公司的使用姿势都不一样,所以要根据公司的要求啊配置啊来。

注意:在查询数据的时候(就是哪些商品需要改变状态...)数据库庞大的话需要建组合索引。比如:我需要查看未上架的,但是上架时间小于当前时间的,那你sql怎么写: 应该是 select * from item where status = 1 and time < now()  假如说status =1 是未上架的,然后上架时间time < 当前时间。那你就需要建立 status 和time的索引对吧,其实status也无所谓,只要建立time的索引就好了,然后查询的时候限制一下time的范围,不要直接 < 当前时间,你可以 between 昨天时间 and 当前时间这样....

2、还是轮询...

在上一步轮询,是因为商品表里,不仅存了定时上下架的商品,还保存了直接上架或者说永久上架的商品对吧。所以呢,另建一张辅助表,这张辅助表只存定时上架的商品信息(并不是与商品表分开,而是把定时上下架的商品备份出一份来),然后你就轮询这张定时上架商品信息表就好了,然后去修改主表的状态,这张辅助表的数据可以直接物理删除。

这个算是第一步的升级版本?都是扫表,扫这张辅助表的数据就明显小很多了,不过在创建商品时多了一个写辅助表数据的事务。

3、发送延时消息

我司消息队列用的是RocketMQ,所以商品定时上下架也可以通过延时消息的方式来实现。实现思路就非常简单了,在配置中定义延时时间的单位,比如秒、小时、天等等,定义一个topic,然后发送Message,然后通过设置message的延时时间 ,比如1d等。然后消费者端订阅该topic,然后消费消息,修改商品的状态等。

4、redis 过期监听

这个也比较好理解,把可以把商品id 作为key,存入redis中并设置过期时间,过期时间即上下架时间,然后向Spring容器中注册一个RedisListener,当key过期的时候会被监听到,然后执行业务代码。

首先要开启redis过期监听,这个一般默认是关闭的,在redis.conf 配置文件中修改 notify-keyspace-events Ex

然后写一个监听类,如下:

然后在 onMessage里执行自己的业务代码即可。

当然Spring的定时调度和定时任务原理是一样的,就不再说了,开启定时,然后定好执行周期,轮询...

以上四种方式,我个人看法:

第一种肯定是不太可取的,因为要扫描全表,特别是线上环境,占有一定的资源,对性能还是有一定影响的。

第二种就是多写代码,写还得往两个表里写,扫描一张表还得操作两张表的数据....

第三种情况是可取的,消息是异步的形式,特别是对性能的影响微乎其微。

第四种情况,redis的过期策略有两种:定时扫描策略+惰性删除策略 ,一些无用的key过期了还被监听,显然有一定的性能开销的。

总而言之,还是要考虑业务场景和数据量等多种因素合理选择吧,我个人是比较倾向于发消息的。不过对于数据量小的情况下,轮询数据库其实也是可以的,平时项目中商品并不像淘宝那么多,可能商品的数据也就几千而已,5分钟轮询一下也没啥....

感谢大家看到这里,非常欢迎大佬的指导,也非常欢迎大家积极交流,共同学习。

后面会持续更新多优质好文,点关注不迷路。

商品定时上下架的解决方案相关推荐

  1. 京东怎么上架产品,定时上下架教程

    京东怎么上架产品?我们在京东开店之后,首先要做的事情就是上传宝贝,但是很多新手卖家遇到产品上架的时候,并不知道怎么去操作?因为上架商品是一件繁琐又费时的事情,尤其是多平台运营同一个品牌店,每个平台都要 ...

  2. 京东年货节怎么定时上下架产品?

    对于京东商家来说,店铺开始运营之后就需要上传产品才能开始销售,上架产品是每个运营必不可少的工作.而且产品主图和视频也要制作,库存方面也要进行设置,这样手动上传产品的话需要很多时间和精力. 2022年的 ...

  3. 电商API 接口用途详解,接口大全(商品、订单、搜索、SKU、上下架)

    电商无货源 API,商品详情关键字搜索.店铺所有商品.商品 SKU 买家卖家 ERP API, 添加购物车.上下架.订单处理 智能多语建站,快速建站 兼容旧站 集成 API 跨境代购系统,多语多支付物 ...

  4. 弘辽科技:淘宝宝贝上下架有哪些规则?该如何优化?

    原标题<弘辽科技:淘宝宝贝上下架有哪些规则?该如何优化?> 在淘宝开店成功的卖家们肯定少不了要上下架商品来维持消费者的新鲜感,但是上下架商品是不是可以按自己想法随意来呢?其实淘宝平台对于商 ...

  5. 拓嘉启远电商:如何合理安排拼多多上下架时间

    合理把握好拼多多商品的上下架时间是可以给商品带来更多的流量的,因为拼多多商品临近下架时间的时候,商品的流量是比较丰富的,所以在商品临近下架的时候上架商品是比较好的.在上架商品的时候还要根据用户作息规律 ...

  6. 商品发布:SPU与SKU-新增和修改商品-商品审核与上下架-删除与还原商品-商品列表-页面对接

    商品发布 SPU与SKU概念理解 SPU:某一款商品的公共属性 SKU:某款商品的不同参数对应的商品信息[某个商品] 新增商品.修改商品 增加:增加SPU和SKU 修改:修改SPU和SKUtb_tem ...

  7. 淘宝的一键上下架工具怎么批量上传商品的?

    淘宝商家日常的商品管理都需要借用到上货软件,能批量上下架商品的软件,毕竟店铺的商品需要不断更换和上新,才能保持每天都有流量进店,现在也快到秋季,商家也该换新款,批量上传商品和下架商品的时候了. 手动上 ...

  8. 新商品发布接口,商品上下架接口,店铺上传接口,oAuth2.0商品发布新的接口对接方式

    一.开放平台新商品发布接口,商品上下架接口,淘宝店铺上传接口,新的接口对接方式文档如下: 第一步:打开开放平台链接:https://open.taobao.com/docV3.htm?spm=a219 ...

  9. 淘宝API,获取商品详情 购买到的订单详情 添加到购物车 商品上下架 批量上传图片 淘宝客订单查询

    淘宝API到底能做什么?如何调用?能获取到哪些数据呢?先展示部分API: item_get 获得淘宝商品详情 buyer_cart_order 将购物车商品保存为订单 buyer_order_list ...

最新文章

  1. unity2018关联不到vs_律道|蓝月传奇VS烈焰武尊:角色扮演类游戏独创性如何认定?...
  2. linux教程 nfs,[原创]linux视频教程之NFS
  3. Java 8中处理集合的优雅姿势——Stream
  4. 我的2015年读书计划,每两周读完一本书!
  5. phpcmsV9内容页hits点击量 - 调用总结
  6. 使用DOM生成XML文件(转)
  7. ServiceMash服务网格--理解lstio/envoy
  8. CoffeeScript 学习笔记
  9. MySQL的select语法
  10. Selenium2+python自动化6-八种元素元素定位(Firebug和firepath)
  11. 树莓派安装ros教程
  12. can 升级软件 上位机 C# 源码 支持STM32升级 提供源码 提供CAN协议
  13. h3c 链路聚合测试_H3CSE学习之链路聚合
  14. arm模拟器手机版_在 Android 模拟器上运行 ARM 应用
  15. 有向图和无向图用邻接矩阵储存
  16. java中instant_Instant
  17. Google Play支付:测试报错“无法购买您要的商品”问题
  18. DeviceIOControl具体解释-各个击破
  19. 一种基于自动机的快速分词方法
  20. 显卡更新+pytorch安装

热门文章

  1. 临界资源 互斥访问 内核中的up和down函数
  2. imx6网口上电后连接不稳定link up,link down
  3. 1. 出现次数最多的数
  4. 华为云快成长直播间花瓣引擎专场即将开始,助力品牌开启出海之旅
  5. ArcGIS VS QGIS——两者之间的27点比较上篇(译)
  6. ArcGIS VS QGIS——两者之间的27点比较(译)
  7. 解决 golang json 中 invalid character ‘\r‘ in string literal 报错
  8. 芯荒背后,且看电阻大展身手
  9. C++类对象到底占多大存储空间呢
  10. 面对对象程序设计课堂总结(yyx)