热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在服务端做大量的用户自定义的定时任务

场景说明:iot设备,设备自身不支持定时的功能,需要服务端根据用户指定的规则下发指令到设备

场景说明:

iot 设备, 设备自身不支持定时的功能, 需要服务端根据用户指定的规则下发指令到设备




举个栗子:


  • 周一至周五,早上 8 点半将报警防御功能打开[出门打工了], 周六周日不用

  • 周一至周五,早上 11 点半将电饭锅打开, 中午 12 点半将电饭锅设置为保温, 周六周日不用

下面是我的尝试, 不知道这个思路有什么坑 [-_-||]

我的思路:

​ 利用 redis pub/sub 与 redis expired 功能;




具体实现:


  1. 将用户设置的定时规则先存入表;

  2. 从用户存入规则中取出最近将要执行的一条任务;

  3. 计算出该任务过期时间然后将任务存入 redis;

  4. 监听 redis 过期事件, 当有过期事件发生时, 执行该任务;

  5. 重复 2 -> 3 -> 4;

我认为会遇到的坑:


  1. 大量过期 key 同时到期会有性能问题吗?

  2. 集群部署同时监听过期事件如何避免重复执行?

  3. 用户随时可增删改规则,感觉我会写出 bug 来...

  4. 用户时区问题,以及夏令时冬令时问题.

经验丰富的大佬们有空帮忙瞅瞅这个设计有什么缺陷吗?


PS: 这种活讲道理确实设备端做比较合适吧

排版乱了, 我排个版面先, 辣到各位眼睛了, sorry


   



推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 散列表的查找过程及优势与劣势
    散列表是一种存储和查找方法,通过散列函数计算记录的散列地址来存储和访问记录。与线性表、树、图等结构不同的是,散列技术的记录之间不存在逻辑关系,只与关键字有关联。散列表的优势在于快速的查找速度,但也存在劣势。散列表最适合解决查找与给问题。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • Redis API
    安装启动最简启动命令行输入验证动态参数启动配置文件启动常用配置通用命令keysbdsize计算key的总数exists判断是否存在delkeyvalue删除指定的keyvalue成 ... [详细]
  • 本文整理了Java中java.lang.NoSuchMethodError.getMessage()方法的一些代码示例,展示了NoSuchMethodErr ... [详细]
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • 本文介绍了如何使用call_user_func_array函数向Redis中添加有序列表或集合。该函数可以接受一个数组作为参数,第一项是要操作的有序列表或集合的键,后续的项目是排序权重和值的交替。通过该函数,可以方便地向Redis中添加多个元素,并指定它们的排序权重。 ... [详细]
  • Redis的默认端口、数据库使用和多端口配置
    本文介绍了Redis的默认端口、数据库使用和多端口配置的方法。通过选择不同的数据库和使用flushdb命令可以实现对不同数据库的访问和清除数据。同时,本文还介绍了在同一台机器上启用多个Redis实例的方法,并讨论了配置认证密码的步骤和注意事项。 ... [详细]
  • 旁路|发生_Day749.旁路缓存:Redis是如何工作的Redis 核心技术与实战
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Day749.旁路缓存:Redis是如何工作的-Redis核心技术与实战相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Redis通用指令及数据库操作详解
    本文详细介绍了Redis中的通用指令,包括key的基本操作、扩展操作和查询模式,以及数据库的基本操作和相关操作。同时还解决了key重复问题,并提供了解决方案。文章内容参考了黑马Redis教程。 ... [详细]
author-avatar
易_拉罐
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有