一种服务器缓存的实现、生成方法及系统与流程

文档序号:11864513阅读:209来源:国知局
一种服务器缓存的实现、生成方法及系统与流程

本发明涉及服务器领域,尤其涉及一种服务器缓存的实现、生成方法及系统。



背景技术:

在服务器系统中,特别对于基于Redis的服务器类型中,每一次的接口调用都会生成一个结果,每个结果都对应一条缓存数据。该缓存数据采用的是Redis提供的键值对。在生成每一条缓存数据时设定其有效时间,若缓存数据超过了有效时间,则Redis缓存会自动将数据设置为无效。

在上述服务器系统中,如果需要清空缓存,则需要去遍历删除每一个键值对。但随着缓存数据越来越多,相应地键值对会越来越多,清空缓存会变得越来越慢。当有大范围的数据变更时,需要去清空缓存。在完成大范围的数据变更的过程中,需要等待的时间会变得越来越长。



技术实现要素:

本发明的主要目的在于提出一种服务器缓存的实现、生成方法及系统,旨在解决缓存清空等待时间问题。

为实现上述目的,本发明实施例提供的一种服务器缓存的实现方法,所述方法包括:

在服务器系统中调用接口,获取接口名称与参数值作为键值,生成结果数据作为缓存值,在所述缓存值中增加缓存有效期字段,将所述键值和缓存值放在哈希表中;

在读取服务器缓存时,获取缓存的有效期字段,判断所述缓存值是否在有效期内,如是,获取所述缓存值的内容;若否,则重新生成缓存数据。

进一步地,所述方法包括,

在服务器系统中调用接口,获取接口名称与参数值作为键值,生成一个结果数据作为缓存值对应得到的所述接口名称和参数值,在缓存值的末尾,即结果数据的末尾增加过期时间数据,将键值和缓存值作为缓存数据放在哈希表中;

在读取服务器缓存时,获取缓存的所述过期时间数据,与服务器当前的时间进行比较,如果当前时间晚于该时间,表示该缓存值已过期,需要重新生成缓存数据;如果当前时间早于该时间,使用该缓存数据,获取缓存值的内容;

所述过期时间数据根据所述缓存值设定的有效时间以及服务器当前的时间戳计算获得。

进一步地,所述方法包括,

在服务器系统中调用接口,获取接口名称与参数值作为键值,生成一个结果数据作为缓存值对应得到的所述接口名称和参数值,在缓存值的末尾,即结果数据的末尾增加缓存值生成时间值和缓存值有效期时间值,将键值和缓存值作为缓存数据放在哈希表中;

在读取服务器缓存时,获取缓存的所述缓存值生成时间值和缓存值有效期时间值,与服务器当前的时间进行比较,如果当前时间与所述缓存值生成时间的差大于所述缓存值有效期时间值,表示该缓存值已过期,需要重新生成缓存数据;如果当前时间与所述缓存值生成时间的差小于所述缓存值有效期时间值,使用该缓存数据,获取缓存值的内容。

进一步地,所述重新生成缓存数据具体包括,

在服务器系统中调用接口生成结果数据,根据设定的有效期生成缓存有效期字段,将所述结果数据加上缓存有效期字段作为缓存值写入哈希表。

本发明还提供了一种服务器缓存生成方法,该方法包括,

在服务器系统中调用接口,获取接口名称与参数值作为键值,生成结果数据作为缓存值,在所述缓存值中增加缓存有效期字段,将所述键值和缓存值放在哈希表中。

进一步地,所述方法包括,

在服务器系统中调用接口,获取接口名称与参数值作为键值,生成一个结果数据作为缓存值对应得到的所述接口名称和参数值,在缓存值的末尾,即结果数据的末尾增加过期时间数据,将键值和缓存值作为缓存数据放在哈希表中;

所述过期时间数据根据所述缓存值设定的有效时间以及服务器当前的时间戳计算获得。

进一步地,所述方法包括,

在服务器系统中调用接口,获取接口名称与参数值作为键值,生成一个结果数据作为缓存值对应得到的所述接口名称和参数值,在缓存值的末尾,即结果数据的末尾增加缓存值生成时间值和缓存值有效期时间值,将键值和缓存值作为缓存数据放在哈希表中;

所述过期时间数据根据所述缓存值设定的有效时间以及服务器当前的时间戳计算获得。

本发明还提供了一种服务器缓存实现系统,所述系统包括,

缓存生成模块,用于在服务器系统中调用接口,获取接口名称与参数值作为键值,生成结果数据作为缓存值,在所述缓存值中增加缓存有效期字段,将所述键值和缓存值放在哈希表中;

缓存读取模块,用于在读取服务器缓存时,获取缓存的有效期字段,判断所述缓存值是否在有效期内,如是,获取所述缓存值的内容;若否,则重新生成缓存数据。

进一步地,所述系统包括,

所述缓存生成模块,用于在服务器系统中调用接口,获取接口名称与参数值作为键值,生成一个结果数据作为缓存值对应得到的所述接口名称和参数值,在缓存值的末尾,即结果数据的末尾增加过期时间数据,将键值和缓存值作为缓存数据放在哈希表中;

所述缓存读取模块,用于在读取服务器缓存时,获取缓存的所述过期时间数据,与服务器当前的时间进行比较,如果当前时间晚于该时间,表示该缓存值已过期,需要重新生成缓存数据;如果当前时间早于该时间,使用该缓存数据,获取缓存值的内容。

进一步地,所述系统包括,

所述缓存生成模块,用于在服务器系统中调用接口,获取接口名称与参数值作为键值,生成一个结果数据作为缓存值对应得到的所述接口名称和参数值,在缓存值的末尾,即结果数据的末尾增加缓存值生成时间值和缓存值有效期时间值,将键值和缓存值作为缓存数据放在哈希表中;

所述缓存读取模块,用于在读取服务器缓存时,获取缓存的所述缓存值生成时间值和缓存值有效期时间值,与服务器当前的时间进行比较,如果当前时间与所述缓存值生成时间的差大于所述缓存值有效期时间值,表示该缓存值已过期,需要重新生成缓存数据;如果当前时间与所述缓存值生成时间的差小于所述缓存值有效期时间值,使用该缓存数据,获取缓存值的内容。

采用本发明提供的技术方案,在生成一条缓存数据时,指定它的有效时间,在有效时间内,读取数据时,都可以用该缓存的数据;一旦过了有效期,该缓存数据会被缓存服务置为无效,这时候服务器就需要去读取最新的数据并将该数据重新写入缓存。采用该方案,清空大量缓存数据时,不需要去遍历删除每一个键值对,只需要删除一张哈希表,因此,耗时从原有技术的几分钟减少为几个毫秒,在提高服务器性能的同时保证用户体验不受影响。

附图说明

图1是本发明实施例一提供的一种服务器缓存实现方法流程图;

图2是本发明实施例中哈希表示意图;

图3是本发明实施例缓存值增加过期时间后的哈希表示意图;

图4是本发明实施例增加数据过期时间后的缓存值示意图;

图5是本发明实施例一种服务器缓存实现系统结构图。

本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

如图1所示,是本发明实施例一提供的一种种服务器缓存实现方法流程图,该方法具体包括,

步骤S101,在服务器系统中调用接口,获取接口名称与参数值作为键值,生成一个结果数据作为缓存值,在所述缓存值中增加缓存有效期字段,将所述键值和缓存值放在一张哈希表中;

作为一个实施例,以Redis缓存服务器为例,Redis的数据结构为key(键值)-value(值)格式,实际上,在Redis缓存服务器中会将key和value都以二进制字流的格式存储。

作为一个实施例,采用哈希表来存储所述服务器的缓存,所述哈希表的名称为API_HASH_TBL,其键(key)为接口名称_参数值,缓存值即该次调用的结果数据。如图2所示,是本发明实施例中哈希表示意图,其中,图中哈希表的键为接口名称_参数值,缓存值为生成的结果数据。采用该哈希表的缓存方法,在清空缓存时,只需要删除这张哈希表即可,而不需要去遍历哈希表中的所有数据,从而使得数据更新的数据变快。

作为一个实施例,在所述缓存值中增加有效期字段,具体有多种实现方式,其中一种方式在哈希表中的缓存值的末尾,即结果数据的末尾增加一个表示缓存过期时间的数据项,例如,该数据项可以为4个字节。如图3所示,是本发明实施例缓存值增加过期时间后的哈希表示意图。

具体来说,缓存中的结果数据是字符串形式存在的,而字符串其实也是二进制的字节码数据。字符串的数据格式是字符串内容+字符串的结束标识符。系统在读取字符串时,根据字符串的结束标识符来判断字符串的数据是否读取完毕。

根据字符串的这个特点,在结果字符串末尾直接添加4个字节的过期时间,这样的好处是,在读取缓存值的时候,不需要去过滤末尾的4个字节。因为字符串的字节码,在末尾是一个0的结束标识,读取字符串时,可以根据该结束标识提取字节码。这样,就不需要代码自己去过滤末尾的过期时间。

作为一个示例,在生成缓存的时候,根据该缓存值设定的有效时间以及服务器当前的时间戳计算出其过期时间,并将过期时间添加在缓存值的末尾。

例如某个缓存值的字符串内容为ABC。那么它的十六进制字节码是0x41、0x42、0x43和0x00这个结束标识符。该数据生成时的时间戳是2016年3月10日9点10分,其设定的有效时间是1个小时。那么根据生成时间加上有效时间计算出该数据的过期时间是2016年3月10日10点10分,转换为整型数据是1457575800,其对应的十六进制字节码是56E0D778。如图4所示,是本发明实施例增加数据过期时间后的缓存值示意图。

在上述的实施例中,所述有效期字段在所述缓存值中的位置既可以位于所述缓存值的末尾,可以位置所述缓存值的头部,具体设置可以根据业务需要进行设置。

步骤S102,在读取服务器缓存时,获取缓存的有效期字段,判断所述缓存值是否在有效期内,如是,获取所述缓存值的内容;若否,则重新生成缓存数据。

作为一个示例,若所述有效期字段为表示所述缓存的过期时间,则判断所述缓存值是否在有效期内将所述过期时间与服务器当前的时间进行比较,如果当前时间晚于该时间,表示该缓存值已过期,需要重新生成缓存数据;如果当前时间早于该时间,使用该缓存数据,通过读取字符串的方式,获取缓存值的内容。在上步骤中,所述缓存过期时间为2016年3月10日10点10分,若当前时间为2016年3月10日10点0分,则当前时间早于过期时间,表示该缓存尚未过期,此时使用该缓存数据,获取该缓存值的内容;若当前时间为2016年3月10日10点30分,则当前时间晚于该过期时间2016年3月10日10点10分,此时表示所述缓存值已经过期,需要向服务器反馈过期信号,重新生成缓存数据。

在上述的示例中,所述重新生成缓存值的过程具体包括,在所述服务器系统中调用接口生成结果数据,根据设定的有效期生成有效期字段,将结果值字符串加上有效期字段作为缓存值写入哈希表。所述有效期字段可以是当前时间加上有效时间生成的过期时间,还可以是所述当前时间和有效期时间的组合。

采用上述方案实现了服务器缓存的有效期机制,生成一条缓存数据时,指定它的有效时间,在有效时间内,读取数据时,都可以用该缓存的数据;一旦过了有效期,该缓存数据会被缓存服务置为无效,这时候服务器就需要去读取最新的数据并将该数据重新写入缓存。采用该缓存机制,在提高服务器性能的同时保证用户体验不受影响。

本发明实施例二还提供了一种服务器缓存实现方法,具体包括,

在上述实施例步骤S101中,

作为一个实施例,在所述缓存值中增加有效期字段,其中一种实现方式是在哈希表中的缓存值的末尾,即结果数据的末尾增加缓存值生成时间和表示缓存有效时间的数据项。

具体来说,在生成缓存的时候,将所述缓存生成时间和所述缓存的有效时间添加在缓存值的末尾,如该缓存数据生成时的时间戳是2016年3月10日9点10分,其设定的有效时间是1个小时。该有效期字段可以采用6个字节,其中4各字节表示所述缓存生成时间,另外2个字节表示设定的有效时间。

在上述的实施例中,所述有效期字段在所述缓存值中的位置既可以位于所述缓存值的末尾,可以位置所述缓存值的头部,具体设置可以根据业务需要进行设置。

在上述实施例步骤S102中,

作为一个示例,若所述有效期字段为缓存值生成时间和表示缓存有效时间的数据项,则判断当前时间与所述缓存值生成时间的时间差是否小于所述所述缓存有效时间,若所述时间差小于所述缓存的有效时间,则使用该缓存数据,通过读取字符串的方式,获取缓存值的内容;若所述时间差大于所述缓存的有效时间,则表示该缓存值已经过期,需要重新生成缓存数据。

该实施例相对于实施例一,在添加有效期字段时更为简单方便,可以快速地实现生成哈希表。

本发明实施例三提供了一种服务器缓存生成方法,具体包括,

在服务器系统中调用接口,获取接口名称与参数值作为键值,生成一个结果数据作为缓存值,在所述缓存值中增加缓存有效期字段,将所述键值和缓存值放在一张哈希表中;

作为一个实施例,以Redis缓存服务器为例,Redis的数据结构为key(键值)-value(值)格式,实际上,在Redis缓存服务器中会将key和value都以二进制字流的格式存储。

作为一个实施例,采用哈希表来存储所述服务器的缓存,所述哈希表的名称为API_HASH_TBL,其键(key)为接口名称_参数值,缓存值即该次调用的结果数据。如图2所示,是本发明实施例中哈希表示意图,其中,图中哈希表的键为接口名称_参数值,缓存值为生成的结果数据。采用该哈希表的缓存方法,在清空缓存时,只需要删除这张哈希表即可,而不需要去遍历哈希表中的所有数据,从而使得数据更新的数据变快。

作为一个实施例,在所述缓存值中增加有效期字段,具体有多种实现方式,其中一种方式在哈希表中的缓存值的末尾,即结果数据的末尾增加一个表示缓存过期时间的数据项,例如,该数据项可以为4个字节。如图3所示,是本发明实施例缓存值增加过期时间后的哈希表示意图。

具体来说,缓存中的结果数据是字符串形式存在的,而字符串其实也是二进制的字节码数据。字符串的数据格式是字符串内容+字符串的结束标识符。系统在读取字符串时,根据字符串的结束标识符来判断字符串的数据是否读取完毕。

根据字符串的这个特点,在结果字符串末尾直接添加4个字节的过期时间,这样的好处是,在读取缓存值的时候,不需要去过滤末尾的4个字节。因为字符串的字节码,在末尾是一个0的结束标识,读取字符串时,可以根据该结束标识提取字节码。这样,就不需要代码自己去过滤末尾的过期时间。

作为一个示例,在生成缓存的时候,根据该缓存值设定的有效时间以及服务器当前的时间戳计算出其过期时间,并将过期时间添加在缓存值的末尾。

例如某个缓存值的字符串内容为ABC。那么它的十六进制字节码是0x41、0x42、0x43和0x00这个结束标识符。该数据生成时的时间戳是2016年3月10日9点10分,其设定的有效时间是1个小时。那么根据生成时间加上有效时间计算出该数据的过期时间是2016年3月10日10点10分,转换为整型数据是1457575800,其对应的十六进制字节码是56E0D778。如图4所示,是本发明实施例增加数据过期时间后的缓存值示意图。

作为一个实施例,在所述缓存值中增加有效期字段,其中一种实现方式是在哈希表中的缓存值的末尾,即结果数据的末尾增加缓存值生成时间和表示缓存有效时间的数据项。

具体来说,在生成缓存的时候,将所述缓存生成时间和所述缓存的有效时间添加在缓存值的末尾,如该缓存数据生成时的时间戳是2016年3月10日9点10分,其设定的有效时间是1个小时。该有效期字段可以采用6个字节,其中4各字节表示所述缓存生成时间,另外2个字节表示设定的有效时间。

在上述的实施例中,所述有效期字段在所述缓存值中的位置既可以位于所述缓存值的末尾,可以位置所述缓存值的头部,具体设置可以根据业务需要进行设置。

本发明实施例四提供了一种服务器缓存读取方法,具体包括,

在读取服务器缓存时,获取缓存的有效期字段,判断所述缓存值是否在有效期内,如是,获取所述缓存值的内容;若否,则重新生成缓存数据。

作为一个示例,若所述有效期字段为表示所述缓存的过期时间,则判断所述缓存值是否在有效期内将所述过期时间与服务器当前的时间进行比较,如果当前时间晚于该时间,表示该缓存值已过期,需要重新生成缓存数据;如果当前时间早于该时间,使用该缓存数据,通过读取字符串的方式,获取缓存值的内容。在上步骤中,所述缓存过期时间为2016年3月10日10点10分,若当前时间为2016年3月10日10点0分,则当前时间早于过期时间,表示该缓存尚未过期,此时使用该缓存数据,获取该缓存值的内容;若当前时间为2016年3月10日10点30分,则当前时间晚于该过期时间2016年3月10日10点10分,此时表示所述缓存值已经过期,需要向服务器反馈过期信号,重新生成缓存数据。

作为一个示例,若所述有效期字段为缓存值生成时间和表示缓存有效时间的数据项,则判断当前时间与所述缓存值生成时间的时间差是否小于所述所述缓存有效时间,若所述时间差小于所述缓存的有效时间,则使用该缓存数据,通过读取字符串的方式,获取缓存值的内容;若所述时间差大于所述缓存的有效时间,则表示该缓存值已经过期,需要重新生成缓存数据。

如图5所示,是本发明实施例一种服务器缓存实现系统结构图,该服务器缓存实现系统具体包括,

缓存生成模块501,用于在服务器系统中调用接口,获取接口名称与参数值作为键值,生成一个结果数据作为缓存值,在所述缓存值中增加缓存有效期字段,将所述键值和缓存值放在一张哈希表中;

缓存读取模块502,用于在读取服务器缓存时,获取缓存的有效期字段,判断所述缓存值是否在有效期内,如是,获取所述缓存值的内容;若否,则重新生成缓存数据。

对于所述缓存生成模块501,具体地,包括,

作为一个实施例,以Redis缓存服务器为例,Redis的数据结构为key(键值)-value(值)格式,实际上,在Redis缓存服务器中会将key和value都以二进制字流的格式存储。

作为一个实施例,采用哈希表来存储所述服务器的缓存,所述哈希表的名称为API_HASH_TBL,其键(key)为接口名称_参数值,缓存值即该次调用的结果数据。如图2所示,是本发明实施例中哈希表示意图,其中,图中哈希表的键为接口名称_参数值,缓存值为生成的结果数据。采用该哈希表的缓存方法,在清空缓存时,只需要删除这张哈希表即可,而不需要去遍历哈希表中的所有数据,从而使得数据更新的数据变快。

作为一个实施例,在所述缓存值中增加有效期字段,具体有多种实现方式,其中一种方式在哈希表中的缓存值的末尾,即结果数据的末尾增加一个表示缓存过期时间的数据项,例如,该数据项可以为4个字节。如图3所示,是本发明实施例缓存值增加过期时间后的哈希表示意图。

具体来说,缓存中的结果数据是字符串形式存在的,而字符串其实也是二进制的字节码数据。字符串的数据格式是字符串内容+字符串的结束标识符。系统在读取字符串时,根据字符串的结束标识符来判断字符串的数据是否读取完毕。

根据字符串的这个特点,在结果字符串末尾直接添加4个字节的过期时间,这样的好处是,在读取缓存值的时候,不需要去过滤末尾的4个字节。因为字符串的字节码,在末尾是一个0的结束标识,读取字符串时,可以根据该结束标识提取字节码。这样,就不需要代码自己去过滤末尾的过期时间。

作为一个示例,在生成缓存的时候,根据该缓存值设定的有效时间以及服务器当前的时间戳计算出其过期时间,并将过期时间添加在缓存值的末尾。

例如某个缓存值的字符串内容为ABC。那么它的十六进制字节码是0x41、0x42、0x43和0x00这个结束标识符。该数据生成时的时间戳是2016年3月10日9点10分,其设定的有效时间是1个小时。那么根据生成时间加上有效时间计算出该数据的过期时间是2016年3月10日10点10分,转换为整型数据是1457575800,其对应的十六进制字节码是56E0D778。如图4所示,是本发明实施例增加数据过期时间后的缓存值示意图。

在上述的实施例中,所述有效期字段在所述缓存值中的位置既可以位于所述缓存值的末尾,可以位置所述缓存值的头部,具体设置可以根据业务需要进行设置。

所述缓存读取模块502,具体地,包括,

作为一个示例,若所述有效期字段为表示所述缓存的过期时间,则判断所述缓存值是否在有效期内将所述过期时间与服务器当前的时间进行比较,如果当前时间晚于该时间,表示该缓存值已过期,需要重新生成缓存数据;如果当前时间早于该时间,使用该缓存数据,通过读取字符串的方式,获取缓存值的内容。在上步骤中,所述缓存过期时间为2016年3月10日10点10分,若当前时间为2016年3月10日10点0分,则当前时间早于过期时间,表示该缓存尚未过期,此时使用该缓存数据,获取该缓存值的内容;若当前时间为2016年3月10日10点30分,则当前时间晚于该过期时间2016年3月10日10点10分,此时表示所述缓存值已经过期,需要向服务器反馈过期信号,重新生成缓存数据。

本发明一种服务器缓存实现系统结构图还提供了另外一种实施例,在上述服务器缓存实现系统中,具体包括,

在所述缓存生成模块501中,

作为一个实施例,在所述缓存值中增加有效期字段,其中一种实现方式是在哈希表中的缓存值的末尾,即结果数据的末尾增加缓存值生成时间和表示缓存有效时间的数据项。

具体来说,在生成缓存的时候,将所述缓存生成时间和所述缓存的有效时间添加在缓存值的末尾,如该缓存数据生成时的时间戳是2016年3月10日9点10分,其设定的有效时间是1个小时。该有效期字段可以采用6个字节,其中4各字节表示所述缓存生成时间,另外2个字节表示设定的有效时间。

在上述的实施例中,所述有效期字段在所述缓存值中的位置既可以位于所述缓存值的末尾,可以位置所述缓存值的头部,具体设置可以根据业务需要进行设置。

在所述缓存读取模块502中,

作为一个示例,若所述有效期字段为缓存值生成时间和表示缓存有效时间的数据项,则判断当前时间与所述缓存值生成时间的时间差是否小于所述所述缓存有效时间,若所述时间差小于所述缓存的有效时间,则使用该缓存数据,通过读取字符串的方式,获取缓存值的内容;若所述时间差大于所述缓存的有效时间,则表示该缓存值已经过期,需要重新生成缓存数据。

采用上述方案实现了服务器缓存的有效期机制,生成一条缓存数据时,指定它的有效时间,在有效时间内,读取数据时,都可以用该缓存的数据;一旦过了有效期,该缓存数据会被缓存服务置为无效,这时候服务器就需要去读取最新的数据并将该数据重新写入缓存。采用该缓存机制,在提高服务器性能的同时保证用户体验不受影响。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。

以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1