本发明涉及信息处理的技术领域,尤其涉及一种基于mysql binlog的分布式缓存方法,以及基于mysql binlog的分布式缓存系统。
背景技术:
现有的技术方案:当用户访问应用程序时,应用程序会先从分布式缓存中根据key获取缓存数据,如果分布式缓存中没有key对应的缓存数据,则应用程序从mysql中查询数据并返回给用户,同时将数据更新到分布式缓存。假如有大量的用户来访问应用程序的,同时这些用户访问请求的数据也不在分布式缓存中,这个时候大量的用户访问只能查询mysql,这样导致mysql压力非常大,mysql成为整个应用程序的性能瓶颈,用户访问请求出现大量的延迟,严重影响了用户体验。例如,中国专利申请号CN201410125645.8,公开了一种用于获取MySQLbinlog增量日志的方法和装置。
技术实现要素:
为克服现有技术的缺陷,本发明要解决的技术问题是提供了一种基于mysql binlog的分布式缓存方法,其保证了分布式缓存数据的及时性,降低了mysql数据库的压力,降低了请求延迟,提升了用户体验。
本发明的技术方案是:这种基于mysql binlog的分布式缓存方法,该方法包括以下步骤:
(1)启用mysql数据库的二进制日志文件binlog;
(2)在数据直接写入mysql数据库时,同时将更新数据写到binlog文件中;
(3)解析binlog文件,将数据库变化的数据实时地写到分布式缓存中;
(4)用户访问时,直接从分布式缓存中获取数据。
本发明通过binlog实现数据实时缓存,保证了分布式缓存数据的及时性;用户访问时,直接从分布式缓存中获取数据,不再需要访问mysql,降低了mysql数据库的压力;所有用户的请求应用程序都可以通过分布式缓存获取到,降低了请求延迟,提升了用户体验。
还提供了一种基于mysql binlog的分布式缓存系统,该系统包括:
binlog启用模块,其配置来启用mysql数据库的二进制日志文件binlog;
binlog生成模块,其配置来在数据直接写入mysql数据库时,同时将更新数据写到binlog文件中;
binlog解析模块,其配置来解析binlog文件,将数据库变化的数据实时地写到分布式缓存中;
访问数据模块,其配置来用户访问时,直接从分布式缓存中获取数据。
附图说明
图1所示为根据本发明的基于mysql binlog的分布式缓存方法的流程图。
具体实施方式
如图1所示,这种基于mysql binlog的分布式缓存方法,该方法包括以下步骤:
(1)启用mysql数据库的二进制日志文件binlog;
(2)在数据直接写入mysql数据库时,同时将更新数据写到binlog文件中;
(3)解析binlog文件,将数据库变化的数据实时地写到分布式缓存中;
(4)用户访问(应用程序)时,直接从分布式缓存中获取数据。
本发明通过binlog实现数据实时缓存,保证了分布式缓存数据的及时性;用户访问时,直接从分布式缓存中获取数据,不再需要访问mysql,降低了mysql数据库的压力;所有用户的请求应用程序都可以通过分布式缓存获取到,降低了请求延迟,提升了用户体验。
另外,所述步骤(1)中,在mysql数据库的安装目录中找到配置文件my.cnf,用vim my.cnf对其进行编辑,修改或增加其中的条目。
另外,所述步骤(1)中,配置后测试mysql中log_bin变量,如果其状态为ON则配置正确。
另外,所述步骤(2)中,对应用户需要访问的数据在产生的时候通过一个应用程序接口写入mysql数据库,这个应用程序接口只负责写入操作,每一条数据在mysql数据库中插入或者修改一个条目,这些插入或者修改操作同时以二进制形式被存储在mysql的binlog中。
本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,包括上述实施例方法的各步骤,而所述的存储介质可以是:ROM/RAM、磁碟、光盘、存储卡等。因此,与本发明的方法相对应的,本发明还同时包括一种基于mysql binlog的分布式缓存系统,该系统通常以与方法各步骤相对应的功能模块的形式表示。使用该方法的系统,该系统包括:
binlog启用模块,其配置来启用mysql数据库的二进制日志文件binlog;
binlog生成模块,其配置来在数据直接写入mysql数据库时,同时将更新数据写到binlog文件中;
binlog解析模块,其配置来解析binlog文件,将数据库变化的数据实时地写到分布式缓存中;
访问数据模块,其配置来用户访问时,直接从分布式缓存中获取数据。
另外,所述binlog启用模块中,在mysql数据库的安装目录中找到配置文件my.cnf,用vim my.cnf对其进行编辑,修改或增加其中的条目。
另外,所述binlog启用模块中,配置后测试mysql中log_bin变量,如果其状态为ON则配置正确。
另外,所述binlog生成模块中,对应用户需要访问的数据在产生的时候通过一个应用程序接口写入mysql数据库,这个应用程序接口只负责写入操作,每一条数据在mysql数据库中插入或者修改一个条目,这些插入或者修改操作同时以二进制形式被存储在mysql的binlog中。
本发明的有益效果如下:
1.通过binlog实现数据实时缓存,保证了分布式缓存数据的及时性。
2.应用程序不再需要访问mysql,降低了mysql数据库的压力。
3.所有用户的请求应用程序都可以通过分布式缓存获取到,降低了请求延迟,提升了用户体验。
以上所述,仅是本发明的较佳实施例,并非对本发明作任何形式上的限制,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属本发明技术方案的保护范围。