一种数据缓存方法技术

技术编号:9568929 阅读:109 留言:0更新日期:2014-01-16 02:31
本发明专利技术公开了一种数据缓存方法。该方法包括:将放入缓存的数据进行序列化处理;将缓存分为两个区域,称为冷区和热区,冷区和热区都采用双向链表结构;将数据插入到缓存时,先将数据放到冷区;当缓存中的数据被命中时,如果该数据是冷区数据,判断该数据是否已命中了预设次数,是则将其转移到热区的尾部,否则将其转移到冷区链表的首部,如果该数据是热区数据,将其转移热区链表的首部。本发明专利技术的技术方案有效提高了对热数据的缓存效率。

【技术实现步骤摘要】
【专利摘要】本专利技术公开了。该方法包括:将放入缓存的数据进行序列化处理;将缓存分为两个区域,称为冷区和热区,冷区和热区都采用双向链表结构;将数据插入到缓存时,先将数据放到冷区;当缓存中的数据被命中时,如果该数据是冷区数据,判断该数据是否已命中了预设次数,是则将其转移到热区的尾部,否则将其转移到冷区链表的首部,如果该数据是热区数据,将其转移热区链表的首部。本专利技术的技术方案有效提高了对热数据的缓存效率。【专利说明】
本专利技术涉及网络通信
,特别涉及。
技术介绍
随着即时通讯产品用户数量的增长和用户活跃度的提升,即时通讯产品的好友数量成几何倍数的增长,系统对数据访问的压力必然越来越大,而其中的对数据库大量并发随机访问通常是系统的瓶颈,因为用户获取其所有好友的相关数据是一种很随机的访问,数据库对磁盘的随机IO读取能力受到磁盘本身随机读写能力的限制。因此只有想办法确定热数据,并缓存尽可能多的热数据(热数据是指被访问次数较多的数据,也可以称为活跃数据,相对地,非活跃数据称为冷数据),才可以减少业务对数据库的访问。
技术实现思路
有鉴于此,本专利技术提供了,该方法提高了对热数据的缓存效率。为达到上述目的,本专利技术的技术方案是这样实现的:本专利技术公开了,该方法包括:将放入缓存的数据进行序列化处理;在缓存中划分出两个区域,称为冷区和热区,冷区和热区都采用双向链表结构;将数据插入到缓存时,先将数据放到冷区;当缓存中的数据被命中时,如果该数据是冷区数据,判断该数据是否已命中了预设次数,是则将其转移到热区的尾部,否则将其转移到冷区链表的首部,如果该数据是热区数据,将其转移热区链表的首部。该方法进一步包括:当冷区满时,先判断热区是否有一定的空闲区域,是则将从冷区链表首部起不大于该空闲区域的一定量的数据转移到热区的尾部,否则删除从冷区链表尾部起的一定量的数据;当热区满时,先判断冷区是否有一定的空闲区域,是则将从热区链表尾部起不大于该空闲区域的一定量的数据转移到冷区的首部,否则删除从热区链表尾部起的一定量的数据。在上述方法中,热区/冷区存储数据的引用,数据的实际缓存内容存储到一个字典中;则上述删除从热区/冷区链表尾部起的一定量的数据具体包括:删除该数据在热区/冷区中的引用,并删除该数据在所述字典中的对应内容。所述将放入缓存的数据的进行序列化处理包括:对于字符串数据,如果都是ASCII字符,每个字符占一个字节,如果包含除ASCII以外的字符,则用UNICODE编码;对于长整型数据,如果长度不够8个字节,则保留其实际数字需要的字节数。所述将放入缓存的数据的进行序列化处理还包括:将缓存对象的元数据全部剔除,只保留对象字段的编号。该方法进一步包括:每隔设定时间将热区中的数据持久化到磁盘中,然后将热区数据的更新情况记录到日志文件中;当缓存数据丢失时,用所述磁盘中的数据恢复热区数据,并读取日志文件内容,从恢复的热区数据中删除日志文件中所记录的发生更新的数据。所述将热区中的数据持久化到磁盘中,将热区数据的更新情况记录到日志文件中包括:将热区数据的引用读到一个热区数据列表中;将热区数据列表中的引用所对应的数据写到磁盘文件中,将这期间的热区数据的更新情况记录在第一哈希表中;将第一哈希表中内容写到日志文件中,并将热区数据的后续更新情况记录到日志文件。所述将热区数据列表中的引用所对应的数据写到磁盘文件包括:将热区数据列表中的引用所对应的数据先写到第二磁盘文件中,写入完成后将第二磁盘文件和第一磁盘文件的文件名互换;当缓存数据丢失时,用当前第一磁盘文件中的数据恢复热区数据。所述将热区数据的引用读到一个热区数据列表中包括:对热区加锁,然后将热区数据的引用读到一个热区数据列表中;该方法进一步包括:在将热区数据的引用读到一个热区数据列表期间,用一个标记使得对热区数据的读访问返回空数据,而对热区数据的写访问则将所访问的数据的标识记录到第二哈希表中;在将热区数据列表中的引用所对应的数据写到磁盘文件中之前,遍历第二哈希表,将其中所记录的数据从热区数据列表中删除。由上述可见,本专利技术这种,将放入缓存的数据进行序列化处理;将缓存分为两个区域,称为冷区和热区,冷区和热区都采用双向链表结构;将数据插入到缓存时,先将数据放到冷区;当缓存中的数据被命中时,如果是冷区数据,判断该数据是否已命中了预设次数,是则将其转移到热区的尾部,否则将其转移到冷区链表的首部,如果是热区数据,将其转移热区链表的首部的技术方案,由于将放入缓存的数据进行了序列化处理,减少了数据对缓存的占用,提高了缓存的存储能力,并且实现了冷热数据的分离,避免了由于大量的随机访问使得热数据被淘汰。【专利附图】【附图说明】图1是本专利技术实施例中的应用访问数据的流程示意图;图2是本专利技术实施例中的双向链表结构的示意图;图3是本专利技术实施例中的持久化的一个流程示意图;图4是本专利技术实施例中服务重启时热区数据的恢复流程图。【具体实施方式】本专利技术的核心思想是:将放入缓存的数据进行序列化处理,减少占用的内存,以尽可能多地缓存数据,并采用一种新的缓存管理方法实现冷热数据的分离,避免由于大量的随机访问使得热数据被淘汰。此外,数据缓存后,由于服务异常启动后,内存缓存丢失,大量的业务访问会“穿透”缓存直接访问数据库。对此,本专利技术中进一步定期将缓存的热数据持久化到磁盘形成一个dmp文件,然后将缓存的更新情况记录到日志(log)文件中。如果服务重启,则用dmp文件恢复缓存中的热区数据,并读取log文件(记录了持久化后对缓存的修改),将log文件中对应的修改记录从恢复后的缓存中删除,即可保证缓存的正确性。为使本专利技术的目的、技术方案和优点更加清楚,下面将结合附图对本专利技术实施方式作进一步地详细描述。1、将缓存数据序列化将缓存数据按字段序列化到字节数据中,具体有如下特点:对于字符串(string)数据,如果都是ASCII字符,每个字符占一个字节,如果包含除ASCII以外的字符,如中文等特殊字符,则用UNICODE编码,而不是UTF-8编码,因为UNICODE对中文编码是2字节,UTF-8通常是3字节;对于长整型(long)数据,如果长度不够8个字节,则保留其实际数字需要的字节数。这样即可高效地完成序列化,将缓存对象的元数据全部剔除,只保留对象字段的编号,占1-2字节,并且序列化后的字节数据会相当小。图1是本专利技术实施例中的应用访问数据的流程示意图。如图1所示,当应用从缓存获取不到数据时访问数据库获取数据,同时该数据被序列化(缓存可以通过调用外部工具生成的缓存类对数据进行序列化)后插入到缓存中,当应用再次获取同一数据时,从缓存中获取该数据的序列化缓存,反序列化后返回给应用。2、新的缓存管理方法本专利技术中给出了一种近似的最近最少使用(LRU, Least Recently Used)算法,因为绝对的LRU算法实现代价太大,不适合在实际环境使用。本专利技术中的近似LRU算法的为:在缓存中划分出两个区域,称为冷区和热区(例如冷区占总缓存的1/3,热区占总缓存的2/3),冷区和热区都采用双向链表结构,包括多个节点,图2是本专利技术实施例中的双向链表结构的示意图;将数据插入到缓存时,先将数据放到冷区;当缓存中的数据被命中时,如果是冷区数据,判断该数据是否已命中了预设本文档来自技高网...

【技术保护点】
一种数据缓存方法,其特征在于,该方法包括:将放入缓存的数据进行序列化处理;在缓存中划分出两个区域,称为冷区和热区,冷区和热区都采用双向链表结构;将数据插入到缓存时,先将数据放到冷区;当缓存中的数据被命中时,如果该数据是冷区数据,判断该数据是否已命中了预设次数,是则将其转移到热区的尾部,否则将其转移到冷区链表的首部,如果该数据是热区数据,将其转移热区链表的首部。

【技术特征摘要】

【专利技术属性】
技术研发人员:王洪泽
申请(专利权)人:北京神州泰岳软件股份有限公司
类型:发明
国别省市:

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

1