一种过期事件自动触发方法及系统技术方案

技术编号:20160397 阅读:33 留言:0更新日期:2019-01-19 00:13
本发明专利技术公开了一种过期事件的自动触发方法及系统,所述方法包括客户端向Redis集群中的各实例写入key并实时设置所述key的过期时间;向Redis集群中的各实例发送过期事件获取命令,以便获取所述各实例返回的过期的key;对所获取的过期的key进行处理,将处理结果发送给对应实例。能够实现对Redis集群分布式环境下的过期事件的处理;过期时间设置简单,失效实时性好。

【技术实现步骤摘要】
一种过期事件自动触发方法及系统
本专利技术涉及计算机应用技术,特别涉及过期事件自动触发方法及系统。
技术介绍
随着NoSQL系统在互联网应用中的普及,为了解决业务应用场景下的各种需求,NoSQL功能特性也逐渐丰富完善,其中TTL(timetolive)特性在定时开关、缓存更新、锁超时等场景下,很好的解决了业务应用的问题,比如定时优惠、网站数据缓存(如积分排行榜)、消息超时取消、延迟队列、事件生命周期到期反馈等等。在众多自带TTL的系统(如MongoDB、Cassandra、Memcache、RabbitMQ、Redis、CouchBase、Hbase等等)中,都能设置带生命周期的KEY或对象,当元素的生命周期结束时,自动销毁元素,业务可以利用这一特性来设置各种标记。针对TTL机制,现有的主流系统如:Redis:支持过期时间设置,通过主动采样和被动访问来淘汰过期的KEY,其采样机制并不能保证覆盖全部的KEY,对于采样未采集到且没有主动访问的过期的key,就会遗留在系统中,因此无法保证实时性。同时,原生的Redis单实例可以利用订阅和keyspace方式实现过期事件的反馈,在分布式环境下无法使用。Cassandra:Cassandra中TTL的精度单位为秒,且不能设置在columnfamily上,只能设置在columnvalue上,设置复杂,且设置后难以改变。若创建时未带TTL后期也难以设置。对于已设置的TTL,只能通过先读取然后再次插入所有数据,交互多且有数据访问。所以Cassandra的TTL操作复杂,更新成本高,且无TTL事件反馈机制。Hbase:Hbase支持表级别和列簇级别,其定义的超时时间是最后更新时间到超时时间的限制,TTL的概念针对CELL,若需要删除行,需要对每一列分别进行设置。所以Hbase的TTL无法直接设置特定时间的TTL,且针对完整行的TTL需要多次操作,列TTL后也无法反馈给业务。MongoDB:MongoDB在建立文档索引的时候可以在索引上添加过期时间(相对当前设置时间的时间限制),若索引字段是一个数组,则需要取索引字段中的最小失效时间。当基于后台方式创建索引时,TTL线程能够在索引创建期间开始删除失效文档,当基于前台方式创建索引时,TTL线程在索引创建完成后开始删除失效文档,TTL索引的删除不能完全保证失效期后一定删除,存在一定延迟(取决于mongod的工作负载),TTL删除文档后台线程每60s移除失效文档(因此可能存在已过失效期,文档还在的情形)。综上所述,在业务应用TTL特性的过程中也存在如下几点问题:(1)TTL的过期时间设置复杂度高;(2)TTL的失效实时性不够。大部分自带TTL特性的系统,一般采用主动扫库和被动访问来搜索系统中已经过期的元素(如Redis),其问题是到达过期时间的元素能否及时失效,其直接关系到系统的精确度;(3)TTL失效后无主动反馈机制。当系统中元素TTL生效后,无法主动通知业务,一般需要业务主动访问系统进行判断和收集,然后再针对TTL事件进行相关的处理,在分布式环境下网络交互次数过多,而且在系统拓扑发生变化的情况下业务需要感知并更新访问域;(4)TTL过期事件处理不能保证完整性。部分带TTL特性的系统,提供订阅通道获取TTL的元素并进行相关处理,但是当事件消费者取走TTL事件但未完成事件处理时除夕那崩溃,就会导致TTL事件丢失。此外,若TTL事件消费者重复消费TTL事件也会导致系统数据的错误;(5)无法灵活定制TTL事件处理逻辑。业务端对TTL事件的处理需要定制,一旦处理规则发生变化,需要更改程序重新上线,无法实现在线更新。
技术实现思路
本申请的多个方面提供了过期事件自动触发方法、系统、设备及存储介质,能够实现对Redis集群分布式环境下的过期事件的处理;过期时间设置简单,失效实时性好。本专利技术的一方面,提供一种过期事件自动触发方法,所述方法包括:客户端向Redis集群中的各实例写入key并实时设置所述key的过期时间;向Redis集群中的各实例发送过期事件获取命令,获取所述各实例返回的过期的key;对所获取的过期的key进行处理,将处理结果发送给对应实例。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述客户端向Redis集群中的各实例写入key包括:所述客户端通过代理服务层向Redis集群中的各实例写入key并实时设置所述key的过期时间。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述向Redis集群中的各实例发送过期事件获取命令包括:所述客户端通过代理服务层向Redis集群中的各实例发送过期事件获取命令。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,各实例返回过期的key包括:各实例将所述带有过期时间的key放入TTL排序队列;将过期的key从所述TTL排序队列中删除,写入过期事件池;根据所述过期事件获取命令,从所述过期事件池中获取过期的key返回给所述客户端,将所述过期的key从过期事件池中移入处理中事件池。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述实时设置所述key的过期时间的同时,设置所述key的过期回调。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述将过期的key从所述TTL排序队列中删除,写入过期事件池包括:首先判断所述过期的key是否设置了过期回调;如果是,则将所述过期的key从所述TTL排序队列中删除,触发预设的过期回调逻辑;如果否,则将所述过期的key从所述TTL排序队列中删除,写入过期事件池。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述将处理结果发送给对应实例还包括:将处理结果发送给对应实例,以便对应实例根据所述处理结果将所述过期的key从处理中事件池中删除。本专利技术的另一方面,提供一种过期事件自动触发方法,所述方法包括:Redis实例接收客户端写入的key,对所述key进行过期检查;其中,所述key设置有过期时间;接收所述客户端发送的过期事件获取命令,将过期的key返回给客户端;接收所述客户端对所述过期的key的处理结果。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述Redis实例接收客户端写入的key包括:所述Redis实例接收所述客户端通过代理服务层写入的key。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述对所述key进行过期检查包括:将所述设置有过期时间的key放入TTL排序队列,遍历所述TTL排序队列进行过期检测;将检测到的过期的key从所述TTL排序队列中删除,写入过期事件池。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述key还设置有过期回调;所述将检测到的过期的key从所述TTL排序队列中删除,写入过期事件池包括:首先判断所述过期的key是否设置了过期回调;如果是,则将所述过期的key从所述TTL排序队列中删除,触发预设的过期回调逻辑;如果否,则将所述过期的key从所述TTL排序队列中删除,写入过期事件池。如上所述的方面和任一可能的实现方式,进一步提供一种实现方式,所述接收所述客户端发送的过期事件获取命令包括:所述Redis实例接本文档来自技高网
...

【技术保护点】
1.一种过期事件自动触发方法,其特征在于,所述方法包括:客户端向Redis集群中的各实例写入key并实时设置所述key的过期时间;向Redis集群中的各实例发送过期事件获取命令,获取所述各实例返回的过期的key;对所获取的过期的key进行处理,将处理结果发送给对应实例。

【技术特征摘要】
1.一种过期事件自动触发方法,其特征在于,所述方法包括:客户端向Redis集群中的各实例写入key并实时设置所述key的过期时间;向Redis集群中的各实例发送过期事件获取命令,获取所述各实例返回的过期的key;对所获取的过期的key进行处理,将处理结果发送给对应实例。2.根据权利要求1所述的方法,其特征在于,所述客户端向Redis集群中的各实例写入key包括:所述客户端通过代理服务层向Redis集群中的各实例写入key并实时设置所述key的过期时间。3.根据权利要求2所述的方法,其特征在于,所述向Redis集群中的各实例发送过期事件获取命令,获取所述各实例返回的过期的key包括:所述客户端通过代理服务层向Redis集群中的各实例发送过期事件获取命令,通过代理服务层获取所述各实例返回的过期的key。4.根据权利要求1所述的方法,其特征在于,各实例返回过期的key包括:各实例将所述带有过期时间的key放入TTL排序队列;将过期的key从所述TTL排序队列中删除,写入过期事件池;根据所述过期事件获取命令,从所述过期事件池中获取过期的key返回给所述客户端,将所述过期的key从过期事件池中移入处理中事件池。5.根据权利要求4所述的方法,其特征在于,所述实时设置所述key的过期时间的同时,设置所述key的过期回调。6.根据权利要求5所述的方法,其特征在于,所述将过期的key从所述TTL排序队列中删除,写入过期事件池包括:首先判断所述过期的key是否设置了过期回调;如果是,则将所述过期的key从所述TTL排序队列中删除,触发预设的过期回调逻辑;如果否,则将所述过期的key从所述TTL排序队列中删除,写入过期事件池。7.根据权利要求4至6任一所述的方法,其特征在于,所述将处理结果发送给对应实例还包括:将处理结果发送给对应实例,以便对应实例根据所述处理结果将所述过期的key从处理中事件池中删除。8.一种过期事件自动触发方法,其特征在于,所述方法包括:Redis实例接收客户端写入的key,对所述key进行过期检查;其中,所述key设置有过期时间;接收所述客户端发送的过期事件获取命令,将过期的key返回给客户端;接收所述客户端对所述过期的key的处理结果。9.根据权利要求8所述的方法,其特征在于,所述Redis实例接收客户端写入的key包括:所述Redis实例接收所述客户端通过代理服务层写入的key。10.根据权利要求8所述的方法,其特征在于,所述对所述key进行过期检查包括:将所述设置有过期时间的key放入TTL排序队列,遍历所述TTL排序队列进行过期检测;将检测到的过期的key从所述TTL排序队列中删除,写入过期事件池。11.根据权利要求10所述的方法,其特征在于,所述key还设置有过期回调;所述将检测到的过期的key从所述TTL排序队列中删除,写入过期事件池包括:首先判断所述过期的key是否设置了过期回调;如果是,则将所述过期的key从所述TTL排序队列中删除,触发预设的过期回调逻辑;如果否,则将所述过期的key从所述TTL排序队列中删除,写入过期事件池。12.根据权利要求10或11所述的方法,其特征在于,所述接收所述客户端发送的过期事件获取命令,将过期的key返回给客户端包括:所述Redis实例接收所述客户端通过代理服务层发送的过期事件获取命令,通过代理服务层将过期的key返回给客户端。13.根据权利要求12所述的方法,其特征在于,所述将过期的key返回给客户端包括:根据所述过期事件获取命令,从所述过期事件池中获取过期的key返回给所述客户端,将所述过期的key从过期事件池中移入处理中事件池。14.根据权利要求13所述的方法,其特征在于,所述接收所述客户端对所述过期的key的处理结果还包括:根据所述处理结果将所述过期的key从处理中事件池中删除。15.一种过期事件自动触发系统,其特征在于,所述系统包括...

【专利技术属性】
技术研发人员:张健
申请(专利权)人:北京百度网讯科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1