对Redishash的每个field进行过期管理的方法与流程

文档序号:19906725发布日期:2020-02-11 14:35阅读:5971来源:国知局
对Redis hash的每个field进行过期管理的方法与流程
本发明涉及计算机领域。更具体地说,本发明涉及一种对redishash的每个field进行过期管理的方法。
背景技术
:redis是当前最为热门的nosql系统之一,它有string、hash、list、set、sortedset5种数据类型,分别有不同的应用场景。其中hash类型可以看做是>结构,即:每个hash的key对应的value内部实际是一个hashmap。redis支持为每个hash类型的缓存设置一个过期时间,即:一个key设置一个过期时间。但是key里每个具体的field并没有自己的过期时间。然而我们经常需要管理单个field的生命周期,而这是redis目前所做不到的。技术实现要素:本发明的一个目的是提供一种对redishash的每个field进行过期管理的方法,能实现对key中每个field的过期管理。为了实现根据本发明的目的和其它优点,提供了一种对redishash的每个field进行过期管理的方法,包括:将redisclient封装到自定义jhredis系统;调用所述自定义jhredis系统判断当前key是否有key为{hashkey}_expire的sortedset,若无,则为所述当前key创建一个key为{hashkey}_expire的sortedset,其member等于所述当前key的field,score为field的过期时间,再向sortedset中写入数据;调用所述自定义jhredis系统读取当前field的sortedset,判断其score是否过期,若过期,则自动清理关于所述当前field的数据,返回空数据,若未过期,则返回value。这样,通过将redisclient封装到自定义jhredis系统,并给当前key增加一个sortedset,其member等于所述当前key的field,score为field的过期时间,即可通过sortedset管理key中每个field的过期时间。优选的是,所述的对redishash的每个field进行过期管理的方法,还包括,在设定周期内对所述自定义jhredis系统进行第一次调用时,对比检查sortedset和hash的数据,使两者保持一致。这样,就避免了比如由于服务器故障而造成数据不完整,导致sortedset和hash的数据发生不一致,实现sortedset和hash的数据一致性。优选的是,所述的对redishash的每个field进行过期管理的方法,还包括,在创建sortedset后,对sortedset中的数据进行初始化。这样,就自动向sortedset对应的每个field中插入基于现在时间的过期时间。本发明还提高了一种对redishash的每个field进行过期管理的装置,包括:自定义jhredis系统,其用于封装redisclient;写操作模块,其用于调用所述自定义jhredis系统判断当前key是否有key为{hashkey}_expire的sortedset,若无,则为所述当前key创建一个key为{hashkey}_expire的sortedset,其member等于所述当前key的field,score为field的过期时间,再向sortedset中写入数据;读操作模块,其用于调用所述自定义jhredis系统读取当前field的sortedset,判断其score是否过期,若过期,则自动清理关于所述当前field的数据,若未过期,则返回value或空数据。优选的是,所述的对redishash的每个field进行过期管理的装置,还包括,对比检查模块,其用于在设定周期内对所述自定义jhredis系统进行第一次调用时,对比检查sortedset和hash的数据,使两者保持一致。优选的是,所述的对redishash的每个field进行过期管理的装置,还包括,初始化模块,其用于在创建sortedset后,对sortedset中的数据进行初始化。本发明还提供了一种电子设备,包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行权利要求1-3中任一项所述的方法。本发明还提供了一种存储介质,其上存储有计算机程序,该程序被处理器执行时,实现权利要求1-3中任一项所述的方法。本发明至少包括以下有益效果:本发明可为hash中的每个key自动生成一个key为{hashkey}_expire的sortedset,其member等于key的field,score为field的过期时间,通过sortedset来维护hash的field及其过期时间,实现对key中每个field的过期管理。本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。附图说明图1是现有业务系统框图;图2是本发明业务系统框图;图3是根据本发明的hash写操作流程图;图4是根据本发明的hash读操作流程图;图5为本发明装置的结构框图。具体实施方式下面结合实施例和附图对本发明做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。应当理解,本文所使用的诸如“具有”、“包含”以及“包括”术语并不排除一个或多个其它元件或其组合的存在或添加。术语解释:redisclient:redis客户端;redisserver:redis服务器;redis系统中包含5中数据类型,分别为string字符串、hash哈希、list列表、set集、sortedset有序集合。现有技术中,业务代码通过redisclient(如:booksleeve、servicestack.redis等)访问redisserver,如图1所示。本发明将redisclient封装在自定义jhredis系统中,并在其上开放了一组访问接口,这些接口在原有redis接口基础上进行了封装和改造,实现了对hash的field过期功能,如图2所示。假设:redis里有两个hash类型的数据,其key分别是:pro、user。如下表所示:业务引用自定义jhredis系统后,就可以通过自定义jhredis系统的接口设置hash的过期时间,代码形如:1.jhredis.helper.addexpireset(″pro_set″,5);2.jhredis.helper.addexpireset(″user_set″,6);设置后,redis里将存储两个string类型的数据:keyvaluepro_set5user_set6然后,自定义jhredis系统会通过sortedset来维护hash的field及其过期时间。具体逻辑如下:hash写操作,如图3所示。业务调用自定义jhredis系统的hash写操作时,自定义jhredis系统会检查当前key是否有key为{hashkey}_expire的sortedset数据。如果没有则会创建一个key为{hashkey}_expire的sortedset数据。其member等于hash的field,其score是hash的field的过期时间(unix时间戳)。即:如果调用自定义jhredis系统的hset(″pro″,″pro_id1″,″{\″id\″:\″pro_id1\″,\″name\″:\″iphone11\″,\″price\″:5599,}″),自定义jhredis系统首先正常保存hash值;接着,根据pro_set的值计算一个过期时间1569233960;然后向sortedset里插入数据:zadd("pro_expire",1569233960,"pro_id1")。这样,在pro_expire里就保存了pro`的field的过期时间,如下表所示。hash读操作,如图4所示。业务调用自定义jhredis系统的hash读操作时,自定义jhredis系统会检查当前field是否已经过期,如果过期,将会自动清理关于此field的数据。即:如果调用自定义jhredis系统的hget("pro","pro_id1"),自定义jhredis系统首先执行zscore("pro_expire","pro_id1"),从而读取过期时间1569233960,判断这个值是否大于当前时间,如果大于则说明已经过期,则自定义jhredis系统将清理"pro"中field为"pro_id1"的数据和"pro_expire"里member为"pro_id1"的数据,返回空数据,如果不大于则说明未过期,则返回value。自定义jhredis系统本身的逻辑必须与具体的redis工具脱钩。因此,本发明采用反向代理方式屏蔽了不同client的区别,使调用者可以切换不同的client而不改动代码。用sortedset维护hash的field及其过期时间,存在这两个数据不一致的可能性。比如由于服务器故障而造成数据不完整,导致两者发生不一致。因此,本发明在hset、hdel时,会通过事务实现sortedset和hash的数据一致性。并且,在每天对自定义jhredis系统的第一次调用的时候,启动一个任务对比检查sortedset和hash的数据。在生产环境部署时,原来redis里的所有hash数据都没有对应的sortedset数据,因此,本发明需要按照业务的设置,对sortedset分批次并行化初始化,自动为所有field添加过期时间。本发明的技术方案带来如下有益效果:为hash中的每个key自动生成一个key为{hashkey}_expire的sortedset,其member等于key的field,score为field的过期时间,通过sortedset来维护hash的field及其过期时间,实现对key中每个field的过期管理。本发明还包含对redishash的每个field进行过期管理的装置,包括:自定义jhredis系统,其用于封装redisclient;写操作模块,其用于调用所述自定义jhredis系统判断当前key是否有key为{hashkey}_expire的sortedset,若无,则为所述当前key创建一个key为{hashkey}_expire的sortedset,其member等于所述当前key的field,score为field的过期时间,再向sortedset中写入数据;;读操作模块,其用于调用所述自定义jhredis系统读取当前field的sortedset,判断其score是否过期,若过期,则自动清理关于所述当前field的数据,若未过期,则返回value或空数据。所述的对redishash的每个field进行过期管理的装置,还包括,对比检查模块,其用于在设定周期内对所述自定义jhredis系统进行第一次调用时,对比检查sortedset和hash的数据,使两者保持一致。所述的对redishash的每个field进行过期管理的装置,还包括,初始化模块,其用于在创建sortedset后,对sortedset中的数据进行初始化。本发明还提供一种电子设备,包括:至少一个处理器,以及与所述至少一个处理器通信连接的存储器,其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行上述的方法。本发明还提供一种存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时,实现上述的方法。尽管本发明的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本发明的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本发明并不限于特定的细节和这里示出与描述的图例。当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有1条留言
  • 访客 来自[中国] 2021年01月11日 14:01
    没实际意义
    0
1