首页 > 其他分享 >未来数据定时刷新——从zset中获取预设时间内的任务添加到list中

未来数据定时刷新——从zset中获取预设时间内的任务添加到list中

时间:2023-07-05 10:47:27浏览次数:48  
标签:tasks zset list 预设 定时 futureKey 数据

未来数据定时刷新——实现步骤:

定时任务/每分钟————》未来数据的keys————》按照分值查询zset,判断数据是否到期——到期》同步到Redis中的list

 

1、如何获取zset中所有的key?  

  keys 模糊匹配,future。效率低

  SCNA命令:SCAN 命令是一个基于游标的迭代器,SCAN命令每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为SCAN命令的游标参数, 以此来延续之前的迭代过程。

 

2、数据如何同步?

第一:从zset中查出数据,并删除

第二:把数据存入到list中

普通redis客户端和服务端交互模式:客户端向服务端建立连接发送请求,获取返回结果。问题:不断建立连接请求

优化:redis管道 Pipeline请求模型:把所有的操作指令放入通道,在通道中执行完成再返回。一次请求获取最终结果

启动类上开启定时任务    @EnableScheduling 

 /**
     * 未来数据定时刷新、每分钟执行一次
     */
    @Scheduled(cron = "0 */1 * * * ?")
    public void refresh(){

        log.info("未来数据定时刷新-----定时任务");

        //获取所有未来数据的集合key
        Set<String> futureKeys = cacheService.scan(ScheduleConstants.FUTURE + "*");

        //按照key和分值查询符合条件的数据
        for (String futureKey : futureKeys) {
            //获取当前数据的key  topic
            String topicKey = ScheduleConstants.TOPIC + futureKey.split(ScheduleConstants.FUTURE)[1];
            Set<String> tasks = cacheService.zRangeByScore(futureKey, 0, System.currentTimeMillis());

            //同步数据
            if(!tasks.isEmpty()){
                //将tasks添加到list中, 从redis中删除tasks,
                cacheService.refreshWithPipeline(futureKey, topicKey, tasks);
                log.info("成功的将" + futureKey + "刷新到了" + topicKey);
            }
        }

    }

 

标签:tasks,zset,list,预设,定时,futureKey,数据
From: https://www.cnblogs.com/fxzm/p/17527875.html

相关文章

  • android 基于ListView和CheckBox实现多选和全选记录的功能(转)
    [原]基于ListView和CheckBox实现多选和全选记录的功能应用开发中经常会有从数据库中读取数据显示,然后选中多条、全部记录并且删除的需求。在做定制系统联系人的时候也遇到这样的需求,下面写个简单的通过ListView和CheckBox实现多选、全选的例子。下面是具体的代码,有问题请留言。代......
  • k8s 操作命令(合集List)
    k8s操作命令合集List一、K8S最常用命令如下:1、获取pod信息:kubectlgetpod2、查看指定pod的日志信息:kubectllogs-f--tail(最后多少行)500podName(pod名)3、查看pod的描述信息:kubectldescribepodpodName4、查看节点信息:kubectlgetnodes5、查看pod的详细信息,以yam......
  • 【十一】JavaScript之案例-todolist
    【十一】JavaScript之案例-todolist基本页面<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title><style>body,ul,input{margin:0;padding:......
  • UE5打包预设路径错误
    在UE5中,设置完打包预设后点击运行发现报了错误。仔细观察发现是因为ERROR:Project'E:/../../Demo05.1/Demo0.uproject'doesnotexist,也就是预设的路径不对。所以我们就只需要修改预设的项目路径即可:然后选择你要打包项目的.uproject文件所在目录就好啦~......
  • C# 使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedExceptio
    C#使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedException)代码:HttpListenerlistener=newHttpListener();错误:System.PlatformNotSupportedException:OperationisnotsupportedonthisplatformInSystem.Net.HttpListener..ctor()解决办......
  • convert string list to number list
    #stringwithintegerssepatedbyspacesstring1="12345678"print("ActualStringcontainingintegers:",string1)print("Typeofstring:",type(string1))#convertingthestringintolistofstringslist1=list(string1.s......
  • Oracle listener 远程投毒漏洞:
    问题说明:就是listener是否允许远程随意注册的意思解决方案:通过oracle自身的设置允许注册的机器(名字、或ip)来限制非法注册 解决:合理配置:listener.oraVALID_NODE_CHECKING_REGISTRATION_LISTENER=ONVALID_NODE_CHECKING_REGISTRATION_LISTENER_SCAN1=ONREGISTRATION_......
  • java List复制:浅拷贝与深拷贝
    Java的拷贝可以分为三种:浅拷贝(ShallowCopy)、深拷贝(DeepCopy)、延迟拷贝(LazyCopy)。在java中除了基本数据类型之外(int,long,short等),还存在引用数据类型,例如String以及对象实例。对于基本数据类型,实际上是拷贝它的值,而对于引用数据类型,拷贝的就是它的引用,并没有创建一个新的......
  • spring 监听器 IntrospectorCleanupListener简介
     spring中的提供了一个名为org.springframework.web.util.IntrospectorCleanupListener的监听器。它主要负责处理由JavaBeans Introspector的使用而引起的缓冲泄露。spring中对它的描述如下: 它是一个在web应用关闭的时候,清除JavaBeansIntrospector的监听器.在web.xml中......
  • C++面试八股文:std::vector和std::list,如何选择?
    C++面试八股文:std::vector和std::list,如何选择?某日二师兄参加XXX科技公司的C++工程师开发岗位第24面:面试官:list用过吗?二师兄:嗯,用过。面试官:请讲一下list的实现原理。二师兄:std::list被称为双向链表,和C中手写双向链表本质上没有大的区别。list对象中有两个指针,一个指向......