缓存及其设计方法以及利用该缓存的调度方法和调度装置的制造方法_2

文档序号:9910835阅读:来源:国知局
br>[0033]在上述示例中,获取锁的步骤可通过SETNX命令来实现。例如,当且仅当key不存在,将key的值设为value,并返回I;若给定的key已经存在,贝ijSETNX不做任何动作,并返回
O。利用这一特性,当返回值为I时,对应调度任务获取到锁,否则,没有获取到锁。
[0034]图5示出了根据发明的实施例的调度装置。该调度装置包括:调度钥匙获取模块410,用于获取多个实例的定时调度任务的调度钥匙;锁获取模块420,用于根据所获取的调度钥匙获取针对所述多个实例的定时调度任务的锁;以及调度任务执行模块430,用于执行所述多个实例中获取到锁的实例的定时调度任务。
[0035]在一些示例中,调度钥匙获取模块410可用于获取定时调度任务所属的类的名称,来作为该定时调度任务的调度钥匙。
[0036]在一些示例中,锁获取模块420可用于:针对多个实例中每个实例的定时调度任务,如果定时调度任务的调度钥匙与之前已获得锁但并未释放锁的定时调度任务的调度钥匙不同,则确定具有不同调度钥匙的定时调度任务获取锁成功,以及如果定时调度任务的调度钥匙与之前已获得锁但并未释放锁的定时调度任务的调度钥匙相同,则确定具有相同调度钥匙的定时调度任务获取锁失败。
[0037]在一些示例中,锁获取模块420是利用SETNX命令实现的。例如,当且仅当key不存在,锁获取模块420将key的值设为value,并返回I;若给定的key已经存在,则锁获取模块420不做任何动作,并返回O。利用这一特性,当返回值为I时,锁获取模块420确定对应调度任务获取到锁,否则,没有获取到锁。
[0038]对于获取锁返回值为I的调度任务,可认为其抢占到锁,则调度任务执行模块430可执行该实例上的调度任务,而其他实例部署的相同的调度任务则返回而不执行,并等待下次调度时间到达以再次公平地抢占锁,从而执行其实例上部署的相应任务。
[0039]图5所示的调度装置还可包括缓存440。该缓存440可以是具有例如图3所示的结构的缓存。缓存440用于存储调度钥匙获取模块410获取的钥匙,以供锁获取模块在获取锁时使用。当然,在一些示例中,缓存440还可以存储调度过程中需要使用的其他一些数据。而在另一些示例中,该数据可以由具有或不具有相同结构的另一个或多个存储器存储,本发明不对此进行限制。
[0040]本发明上述实施例的调度方法和调度装置实现了多实例部署方案,其不必考虑定时调度的实例及调度任务同时运行对数据一致性的影响,在保证数据一致性的同时,提升了系统稳定性。在本发明的上述实施例中采用缓存“pre-sharding”技术,实现了主(Master)-从(Slave)缓存的部署,同时利用Redis的分布式锁等一系列方法来保证高效可靠的数据输出。
[0041]此外,需要注意的是,本发明实施例所记载的技术方案在不冲突的情况下可以任意组合。
[0042]在本发明所提供的几个实施例中,应该理解到,所揭露的方法和设备,可以通过其它的方式实现。以上所描述的设备实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,如:多个单元或组件可以结合,或可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的各组成部分相互之间的耦合、或直接耦合、或通信连接可以是通过一些接口,设备或单元的间接耦合或通信连接,可以是电性的、机械的或其它形式的。
[0043]上述作为分离部件说明的单元可以是、或也可以不是物理上分开的,作为单元显示的部件可以是、或也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上;可以根据实际的需要选择其中的部分或全部单元来实现本实施例方案的目的。
[0044]另外,在本发明各实施例中的各功能单元可以全部集成在一个第二处理单元中,也可以是各单元分别单独作为一个单元,也可以两个或两个以上单元集成在一个单元中;上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
[0045]上面的描述仅用于实现本发明的实施方式,本领域的技术人员应该理解,在不脱离本发明的范围的任何修改或局部替换,均应该属于本发明的权利要求来限定的范围,因此,本发明的保护范围应该以权利要求书的保护范围为准。
【主权项】
1.一种缓存设计方法,包括: 将缓存的存储空间划分为多个片;以及 将所述多个片中的每个片划分为主节点和从节点; 其中,在将数据存入所述缓存时,将所述数据分布是所述多个片上,且对于所述多个片中的每个片,将所分布的数据同步写入所述主节点和所述从节点,以及 在从所述缓存读取数据时,仅从所述多个片中每个片的主节点读取数据。2.根据权利要求1所述的方法,其中,所述缓存是redis缓存。3.—种缓存,包括: 被划分为多个片的存储空间, 其中,所述多个片中的每个片被划分为主节点和从节点,在将数据存入所述缓存时,将所述数据分布是所述多个片上,且对于所述多个片中的每个片,将所分布的数据同步写入所述主节点和所述从节点,以及在从所述缓存读取数据时,仅从所述多个片中每个片的主节点读取数据。4.根据权利要求3所述的缓冲,其中,所述缓存是redis缓存。5.—种调度方法,包括: 获取多个实例的定时调度任务的调度钥匙; 根据所获取的调度钥匙获取针对所述多个实例的定时调度任务的锁;以及 执行所述多个实例中获取到锁的实例的定时调度任务。6.根据权利要求5所述的方法,其中,获取多个实例的定时调度任务的调度钥匙包括:获取所述定时调度任务所属的类的名称,作为所述定时调度任务的调度钥匙。7.根据权利要求6所述的方法,其中,在所述多个实例的定时调度任务相同时,获取到的调度钥匙也相同。8.根据权利要求5所述的方法,其中,根据所获取的调度钥匙获取针对所述多个实例的定时调度任务的锁包括:针对所述多个实例中每个实例的定时调度任务,如果所述定时调度任务的调度钥匙与之前已获得锁但并未释放锁的定时调度任务的调度钥匙不同,则具有不同调度钥匙的所述定时调度任务获取锁成功,以及如果所述定时调度任务的调度钥匙与之前已获得锁但并未释放锁的定时调度任务的调度钥匙相同,则具有相同调度钥匙的所述定时调度任务获取锁失败。9.根据权利要求8所述的方法,其中,所述获取锁的步骤是通过SETNX命令实现的。10.—种调度装置,包括: 调度钥匙获取模块,用于获取多个实例的定时调度任务的调度钥匙; 锁获取模块,用于根据所获取的调度钥匙获取针对所述多个实例的定时调度任务的锁;以及 调度任务执行模块,用于执行所述多个实例中获取到锁的实例的定时调度任务。11.根据权利要求10所述的调度装置,其中,所述调度钥匙获取模块用于获取所述定时调度任务所属的类的名称,作为所述定时调度任务的调度钥匙。12.根据权利要求10所述的调度装置,其中,所述锁获取模块用于:针对所述多个实例中每个实例的定时调度任务,如果所述定时调度任务的调度钥匙与之前已获得锁但并未释放锁的定时调度任务的调度钥匙不同,则确定具有不同调度钥匙的所述定时调度任务获取锁成功,以及如果所述定时调度任务的调度钥匙与之前已获得锁但并未释放锁的定时调度任务的调度钥匙相同,则确定具有相同调度钥匙的所述定时调度任务获取锁失败。13.根据权利要求12所述的调度装置,其中,所述锁获取模块是利用SETNX命令实现的。
【专利摘要】本发明提供了一种缓存及其设计方法以及利用该缓存的调度方法和调度装置。该方法包括将缓存的存储空间划分为多个片;以及将所述多个片中的每个片划分为主节点和从节点。其中,在将数据存入所述缓存时,将所述数据分布是所述多个片上,且对于所述多个片中的每个片,将所分布的数据同步写入所述主节点和所述从节点,以及在从所述缓存读取数据时,仅从所述多个片中每个片的主节点读取数据。上述方法和装置可以不考虑具体定时调度的单实例单线程属性,实现多个实例部署。
【IPC分类】G06F9/48
【公开号】CN105677468
【申请号】CN201610007162
【发明人】张锋, 罗涛, 曲铮
【申请人】北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
【公开日】2016年6月15日
【申请日】2016年1月6日
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1