CN111666305B - 一种实现redis缓存和数据库进行关联的方法及其系统 - Google Patents
一种实现redis缓存和数据库进行关联的方法及其系统 Download PDFInfo
- Publication number
- CN111666305B CN111666305B CN202010503899.4A CN202010503899A CN111666305B CN 111666305 B CN111666305 B CN 111666305B CN 202010503899 A CN202010503899 A CN 202010503899A CN 111666305 B CN111666305 B CN 111666305B
- Authority
- CN
- China
- Prior art keywords
- data
- key
- query
- redis
- cache
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种实现redis缓存和数据库进行关联的方法,把mysql的数据读取分为两大类:主键查询读取和条件查询读取;根据主键ID,获得对应的缓存key=[表名]:主键ID,如果主键ID的数据更新了,根据缓存key规则[表名]+主键ID,删除此缓存即可;如果是条件查询则会产生2个缓存key,即一个是依赖缓存key,一个是数据缓存key;依赖缓存key=dependency:user_tb,数据缓存key=k:md5(sql语句),其中,依赖缓存key用于标明这张数据表是否有更新行为;本发明做到数据更新的情况下自动清理redis缓存,从而使系统在下次读取就可以获得最新数据。
Description
技术领域
本发明涉及数据库管理技术领域,特别是一种实现redis缓存和数据库进行关联的方法及其系统。
背景技术
现有的系统随着业务流量的上升,系统访问量加大,为了减缓mysql数据库压力,通常会采用缓存策略,用redis内存数据库作为缓存服务,在读取mysql之前,先从redis里读取数据,如果数据不存在或者失效,再从mysql里读取。但这导致了一个问题,如果mysql数据库数据有更新,在缓存失效之前,系统是拿不到最新的数据。为了实现实时更新,现有技术通常会在mysql更新的时候,主动去删除相关业务的缓存数据。如果一个两个业务还好,但是在业务不断增多的场景下,缓存key五花八门,管理困难,主动去清理缓存变得不实际。为了解决这个痛点,本发明设计了一种实现redis缓存和数据库进行关联的方法及其系统。
发明内容
为克服上述问题,本发明的目的是提供一种实现redis缓存和数据库进行关联的方法,实现redis缓存和数据库的自动关联,提高开发效率,降低缓存的维护难度。
本发明采用以下方案实现:一种实现redis缓存和数据库进行关联的方法,所述方法包括如下步骤:
步骤S1、将mysql数据库的数据读取设置为两类:主键查询读取和条件查询读取;
步骤S2、通过查询语句来判断数据读取类型,主键查询读取,则进入步骤S3,条件查询读取,则进入步骤S4;
步骤S3、根据主键id和查询的表名来组织redis缓存key,即redis缓存key=tbname:id;通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,结束流程;
步骤S4、根据查询条件获取依赖key,即依赖key=dependency:tb,判断依赖key是否存在数据,如果不存在,则前往mysql数据库查询数据,获得数据data;如果存在则组织redis缓存key,即redis缓存key=k:md5(sql),通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在,则前往mysql数据库查询数据,获得数据data。
进一步的,所述步骤S3进一步具体为:步骤S31、通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入步骤S32;
步骤S32、前往mysql数据库查询数据,获得数据data,如果查询数据不存在直接返回空,如果查询数据存在,则进入步骤S33;
步骤S33、获得数据data后根据所述redis缓存key=tbname:id;把数据data存入redis缓存中,并设置数据过期时间t1,返回数据data。
进一步的,所述步骤S4进一步具体为:步骤S41、判断依赖key是否存在数据,不存在,则进入步骤S42,如果dependency:tb存在数据表示这张表没有经过修改,则根据查询条件组织数据缓存key=k:md5(sql),组织结果是k:a0c5bc3ce12f733cf091929eb47bbed4,前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入步骤S42;
步骤S42、进入mysql数据库查询数据,获得数据data,查询数据库结果如果不存在数据直接返回空,存在则进入步骤S43;
步骤S43、存在数据data,则存储依赖key=dependency:tb,value=1;
步骤S44、存储数据data到数据缓存key中,key=k:a0c5bc3ce12f733cf091929eb47bbed4,value=data,设置过期时间t2小时,返回数据data。
进一步的,所述方法还包括数据库的数据更新,数据更新也分为两种情况,根据主键更新单条数据信息和根据查询条件批量更新;
所述根据主键更新单条数据信息为:根据主键id获得redis缓存key=tbname:id;清理该主键id的redis缓存key的reids缓存,那么在通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存;
所述根据查询条件批量更新为:根据查询条件批量更新,则将依赖key进行清理,即把key=dependency:tb的redis缓存清理,则通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存。
本发明还提供了一种实现redis缓存和数据库进行关联的系统,所述系统包括读取设置模块、判断模块、主键查询获取数据模块、以及条件查询获取数据模块;
所述读取设置模块,用于将mysql数据库的数据读取设置为两类:主键查询读取和条件查询读取;
所述判断模块,通过查询语句来判断数据读取类型,主键查询读取,则执行主键查询获取数据模块,条件查询读取,则执行条件查询获取数据模块;
所述主键查询获取数据模块,用于根据主键id和查询的表名来组织redis缓存key,即redis缓存key=tbname:id;通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,结束流程;
所述条件查询获取数据模块,用于根据查询条件获取依赖key,即依赖key=dependency:tb,判断依赖key是否存在数据,如果不存在,则前往mysql数据库查询数据,获得数据data;如果存在则组织redis缓存key,即key=k:md5(sql),通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在,则前往mysql数据库查询数据,获得数据data。
进一步的,所述主键查询获取数据模块进一步具体为:通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,如果查询数据不存在直接返回空,如果查询数据存在,则获得数据data后根据所述redis缓存key=tbname:id;把数据data存入redis缓存中,并设置数据过期时间t1,返回数据data。
进一步的,所述条件查询获取数据模块进一步具体为:判断依赖key是否存在数据,不存在,则进入mysql数据库查询数据,获得数据data,如果dependency:tb存在数据表示这张表没有经过修改,则根据查询条件组织数据缓存key=k:md5(sql),组织结果是k:a0c5bc3ce12f733cf091929eb47bbed4,前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入mysql数据库查询数据,获得数据data,查询数据库结果如果不存在数据直接返回空,存在数据data,则存储依赖key=dependency:tb,value=1;同时存储数据data到数据缓存key中,key=k:a0c5bc3ce12f733cf091929eb47bbed4,value=data,设置过期时间t2小时,返回数据data。
进一步的,所述系统还能进行数据库的数据更新,数据更新也分为两种情况,根据主键更新单条数据信息和根据查询条件批量更新;
所述根据主键更新单条数据信息为:根据主键id获得redis缓存key=tbname:id;清理该主键id的redis缓存key的reids缓存,那么在通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存;
所述根据查询条件批量更新为:根据查询条件批量更新,则将依赖key进行清理,即把key=dependency:tb的redis缓存清理,则通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存。
本发明的有益效果在于:可以做到数据更新的情况下自动清理redis缓存,从而使系统在下次读取可以获得最新数据。另外,本发明通过设定的规则来实现缓存的自动关联,减少了大多的业务开发场景为了管理缓存而浪费的编码时间,提高开发效率,降低缓存的维护难度。
附图说明
图1是本发明的方法流程示意图。
图2是本发明实施例一的Redis缓存效果图。
图3是本发明的系统原理框图。
具体实施方式
下面结合附图对本发明做进一步说明。
本发明把mysql的数据读取分为两大类:主键查询读取和条件查询读取;根据主键ID,获得对应的缓存key=[表名]:主键ID,如果主键ID的数据更新了,根据缓存key规则[表名]+主键ID,删除此缓存即可;如果是条件查询则会产生2个缓存key,即一个是依赖缓存key,一个是数据缓存key;依赖缓存key=dependency:user_tb,数据缓存key=k:md5(sql语句),其中,依赖缓存key用于标明这张数据表是否有更新行为。
请参阅图1所示,本发明的一种实现redis缓存和数据库进行关联的方法,所述方法包括如下步骤:
步骤S1、将mysql数据库的数据读取设置为两类:主键查询读取和条件查询读取;
步骤S2、通过查询语句来判断数据读取类型,主键查询读取,则进入步骤S3,条件查询读取,则进入步骤S4;
步骤S3、根据主键id和查询的表名来组织redis缓存key,即redis缓存key=tbname:id;通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,结束流程;所述步骤S3进一步具体为:步骤S31、通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入步骤S32;
步骤S32、前往mysql数据库查询数据,获得数据data,如果查询数据不存在直接返回空,如果查询数据存在,则进入步骤S33;
步骤S33、获得数据data后根据所述redis缓存key=tbname:id;把数据data存入redis缓存中,并设置数据过期时间t1,返回数据data。
步骤S4、根据查询条件获取依赖key,即依赖key=dependency:tb,依赖缓存key用于标明这张数据表是否有更新行为。判断依赖key是否存在数据,如果不存在,则前往mysql数据库查询数据,获得数据data;如果存在则组织redis缓存key,即redis缓存key=k:md5(sql),通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在,则前往mysql数据库查询数据,获得数据data。
所述步骤S4进一步具体为:步骤S41、判断依赖key是否存在数据,不存在,则进入步骤S42,如果dependency:tb存在数据表示这张表没有经过修改,则根据查询条件组织数据缓存key=k:md5(sql),组织结果是k:a0c5bc3ce12f733cf091929eb47bbed4,前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入步骤S42;
步骤S42、进入mysql数据库查询数据,获得数据data,查询数据库结果如果不存在数据直接返回空,存在则进入步骤S43;
步骤S43、存在数据data,则存储依赖key=dependency:tb,value=1;
步骤S44、存储数据data到数据缓存key中,key=k:a0c5bc3ce12f733cf091929eb47bbed4,value=data,设置过期时间t2小时,返回数据data。
其中,所述方法还包括数据库的数据更新,数据更新也分为两种情况,根据主键更新单条数据信息和根据查询条件批量更新;
所述根据主键更新单条数据信息为:根据主键id获得redis缓存key=tbname:id;清理该主键id的redis缓存key的reids缓存,那么在通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存;
所述根据查询条件批量更新为:根据查询条件批量更新,则将依赖key进行清理,即把key=dependency:tb的redis缓存清理,则通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存。
下面结合一具体实施例对本发明作进一步说明:
本发明一种实现redis缓存和数据库进行关联的方法,所述方法为:
步骤1:业务入口进入后,通过查询语句来判断读取类型(主键查询还是条件查询),如果是select * from shop_tb where id=10 limit 1这类型,那是主键查询进入步骤2;如果是select * from shop_tb where price<100 and tags=‘推荐’这类型的则进入步骤3;
步骤2:根据主键ID和表名来组织redis缓存key=tbname:id,依照步骤1语句,key=shop_tb:10;即表名为shop_tb,主键ID=10;
步骤2.1:根据步骤2得到的reids缓存key=shop_tb:10,前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入步骤2.2;
步骤2.2:前往mysql数据库查询数据,获得数据data,如果不存在直接返回空。
步骤2.3:获得数据data后根据步骤2的缓存key=shop_tb:10,把数据data存入redis缓存中,设置过期时间1小时,返回数据data。
步骤3:根据步骤1的查询条件,能知道表名是shop_tb,再根据依赖key规则dependency:tb得到dependency:shop_tb,判断依赖key是否存在,如果存在则进入步骤3.1,如果不存在则进入步骤3.2。
步骤3.1:如果dependency:shop_tb存在数据表示这张表没有经过修改,则根据步骤1的查询条件select * from shop_tb where price<100 and tags=‘推荐’组织数据缓存key=k :md5(sql语句),组织结果是k:a0c5bc3ce12f733cf091929eb47bbed4,其中k就是固定的字符串k,为了让redis缓存看起来清楚一些,让这些数据缓存key都在k:底下(如图2所示)。前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入步骤3.2;
步骤3.2:此步骤3和步骤3.1进来的,是依赖key或者数据缓存key过期的情况,进入数据库查询阶段的步骤,查询数据库结果如果不存在则直接返回空。
步骤3.3:存在数据data,则存储依赖key=dependency:shop_tb,value=1(value是什么不重要,只是为了表示数据表是否被修改过)。
步骤3.4:存储数据data到数据缓存key中,key=k:a0c5bc3ce12f733cf091929eb47bbed4,,value=data,设置过期时间1小时,返回数据data。
步骤4:以上步骤是数据读取相关的逻辑,下面来说下数据修改的逻辑。数据有更新(包括update和delete),也分为2种情况根据主键更新单条数据信息(步骤4.1)和根据条件批量更新(步骤4.2)。
步骤4.1:例如更新id为10的商品的价格为100元,语句如下update shop_tb setprice=100 where id=10,根据key=tbname:id的规则得到key=shop_tb:10,清理key的reids缓存,那么在调用步骤2的时候,因为缓存失效,则会重新从mysql读取最新数据加入redis缓存。
步骤4.2:例如更新价格小于100元的商品为推荐商品,语句如下update shop_tbset tags=‘推荐’where price<100,这是属于第2种情况根据条件批量更新,就把依赖key给清理了,把key=dependency:shop_tb的redis缓存清理。
另外,以上描述了一种通用的缓存关联方案,可以通过通用的增删改查方法的调用,识别出业务的操作类型、表名、主键、sql语句,来自动的对缓存进行相关操作,以此来达到缓存关联的目的。当然这是通用的场景,如果shop_tb有一块业务的数据查询频率很高,那可以通过附加依赖key的方式来进行区分,这样就不会导致其他业务对shop_tb表的更新而影响到特殊业务的缓存读取。什么叫做附加依赖key呢,就是在原有依赖key规则的基础上加上一个依赖attachkey,依赖attachkey=dependency:tbname+attachkey,这样就可以和通用的依赖规则区分开,以此来实现特殊业务特殊管理,通用业务采用通过规则。
如图3所示,本发明还提供了一种实现redis缓存和数据库进行关联的系统,所述系统包括读取设置模块、判断模块、主键查询获取数据模块、以及条件查询获取数据模块;
所述读取设置模块,用于将mysql数据库的数据读取设置为两类:主键查询读取和条件查询读取;
所述判断模块,通过查询语句来判断数据读取类型,主键查询读取,则执行主键查询获取数据模块,条件查询读取,则执行条件查询获取数据模块;
所述主键查询获取数据模块,用于根据主键id和查询的表名来组织redis缓存key,即redis缓存key=tbname:id;通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,结束流程;
所述条件查询获取数据模块,用于根据查询条件获取依赖key,即依赖key=dependency:tb,依赖缓存key用于标明这张数据表是否有更新行为。判断依赖key是否存在数据,如果不存在,则前往mysql数据库查询数据,获得数据data;如果存在则组织redis缓存key,即key=k:md5(sql),通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在,则前往mysql数据库查询数据,获得数据data。
其中,所述主键查询获取数据模块进一步具体为:通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,如果查询数据不存在直接返回空,如果查询数据存在,则获得数据data后根据所述redis缓存key=tbname:id;把数据data存入redis缓存中,并设置数据过期时间t1,返回数据data。
所述条件查询获取数据模块进一步具体为:判断依赖key是否存在数据,不存在,则进入mysql数据库查询数据,获得数据data,如果dependency:tb存在数据表示这张表没有经过修改,则根据查询条件组织数据缓存key=k:md5(sql),组织结果是k:a0c5bc3ce12f733cf091929eb47bbed4,前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入mysql数据库查询数据,获得数据data,查询数据库结果如果不存在数据直接返回空,存在数据data,则存储依赖key=dependency:tb,value=1;同时存储数据data到数据缓存key中,key=k:a0c5bc3ce12f733cf091929eb47bbed4,value=data,设置过期时间t2小时,返回数据data。
另外,所述系统还能进行数据库的数据更新,数据更新也分为两种情况,根据主键更新单条数据信息和根据查询条件批量更新;
所述根据主键更新单条数据信息为:根据主键id获得redis缓存key=tbname:id;清理该主键id的redis缓存key的reids缓存,那么在通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存;
所述根据查询条件批量更新为:根据查询条件批量更新,则将依赖key进行清理,即把key=dependency:tb的redis缓存清理,则通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存。
以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
Claims (6)
1.一种实现redis缓存和数据库进行关联的方法,其特征在于:所述方法包括如下步骤:
步骤S1、将mysql数据库的数据读取设置为两类:主键查询读取和条件查询读取;
步骤S2、通过查询语句来判断数据读取类型,主键查询读取,则进入步骤S3,条件查询读取,则进入步骤S4;
步骤S3、根据主键id和查询的表名来组织redis缓存key,即redis缓存key=tbname:id;通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,结束流程;
步骤S4、根据查询条件获取依赖key,即依赖key=dependency:tb,tb为数据表,判断依赖key是否存在数据,如果不存在,则前往mysql数据库查询数据,获得数据data;如果存在则组织redis缓存key,即redis缓存key=k:md5(sql语句),所述k为固定的字符串k,通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在,则前往mysql数据库查询数据,获得数据data;所述步骤S4进一步具体为:步骤S41、判断依赖key是否存在数据,不存在,则进入步骤S42,如果dependency:tb存在数据表示这张表没有经过修改,则根据查询条件组织数据缓存key=k:md5(sql语句),组织结果是k:a0c5bc3ce12f733cf091929eb47bbed4,前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入步骤S42;
步骤S42、进入mysql数据库查询数据,获得数据data,查询mysql数据库结果如果不存在数据直接返回空,存在则进入步骤S43;
步骤S43、存在数据data,则存储依赖key=dependency:tb,value=1;
步骤S44、存储数据data到数据缓存key中,key=k:a0c5bc3ce12f733cf091929eb47bbed4,value=data,设置过期时间t2小时,返回数据data。
2.根据权利要求1所述的一种实现redis缓存和数据库进行关联的方法,其特征在于:所述步骤S3进一步具体为:步骤S31、通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入步骤S32;
步骤S32、前往mysql数据库查询数据,获得数据data,如果查询数据不存在直接返回空,如果查询数据存在,则进入步骤S33;
步骤S33、获得数据data后根据所述redis缓存key=tbname:id;把数据data存入redis缓存中,并设置数据过期时间t1,返回数据data。
3.根据权利要求1所述的一种实现redis缓存和数据库进行关联的方法,其特征在于:所述方法还包括数据库的数据更新,数据更新也分为两种情况,根据主键更新单条数据信息和根据查询条件批量更新;
所述根据主键更新单条数据信息为:根据主键id获得redis缓存key=tbname:id;清理该主键id的redis缓存key的redis缓存,那么在通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存;
所述根据查询条件批量更新为:根据查询条件批量更新,则将依赖key进行清理,即把key=dependency:tb的redis缓存清理,则通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存。
4.一种实现redis缓存和数据库进行关联的系统,其特征在于:所述系统包括读取设置模块、判断模块、主键查询获取数据模块、以及条件查询获取数据模块;
所述读取设置模块,用于将mysql数据库的数据读取设置为两类:主键查询读取和条件查询读取;
所述判断模块,通过查询语句来判断数据读取类型,主键查询读取,则执行主键查询获取数据模块,条件查询读取,则执行条件查询获取数据模块;
所述主键查询获取数据模块,用于根据主键id和查询的表名来组织redis缓存key,即redis缓存key=tbname:id;通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,结束流程;
所述条件查询获取数据模块,用于根据查询条件获取依赖key,即依赖key=dependency:tb,tb为数据表,判断依赖key是否存在数据,如果不存在,则前往mysql数据库查询数据,获得数据data;如果存在则组织redis缓存key,即key=k:md5(sql语句),所述k为固定的字符串k,通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在,则前往mysql数据库查询数据,获得数据data;所述条件查询获取数据模块进一步具体为:判断依赖key是否存在数据,不存在,则进入mysql数据库查询数据,获得数据data,如果dependency:tb存在数据表示这张表没有经过修改,则根据查询条件组织数据缓存key=k:md5(sql语句),组织结果是k:a0c5bc3ce12f733cf091929eb47bbed4,前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则进入mysql数据库查询数据,获得数据data,查询mysql数据库结果如果不存在数据直接返回空,存在数据data,则存储依赖key=dependency:tb,value=1;同时存储数据data到数据缓存key中,key=k:a0c5bc3ce12f733cf091929eb47bbed4,value=data,设置过期时间t2小时,返回数据data。
5.根据权利要求4所述的一种实现redis缓存和数据库进行关联的系统,其特征在于:所述主键查询获取数据模块进一步具体为:通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,如果查询数据不存在直接返回空,如果查询数据存在,则获得数据data后根据所述redis缓存key=tbname:id;把数据data存入redis缓存中,并设置数据过期时间t1,返回数据data。
6.根据权利要求4所述的一种实现redis缓存和数据库进行关联的系统,其特征在于:所述系统还能进行数据库的数据更新,数据更新也分为两种情况,根据主键更新单条数据信息和根据查询条件批量更新;
所述根据主键更新单条数据信息为:根据主键id获得redis缓存key=tbname:id;清理该主键id的redis缓存key的redis缓存,那么在通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存;
所述根据查询条件批量更新为:根据查询条件批量更新,则将依赖key进行清理,即把key=dependency:tb的redis缓存清理,则通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010503899.4A CN111666305B (zh) | 2020-06-05 | 2020-06-05 | 一种实现redis缓存和数据库进行关联的方法及其系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010503899.4A CN111666305B (zh) | 2020-06-05 | 2020-06-05 | 一种实现redis缓存和数据库进行关联的方法及其系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111666305A CN111666305A (zh) | 2020-09-15 |
CN111666305B true CN111666305B (zh) | 2023-03-14 |
Family
ID=72386077
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010503899.4A Active CN111666305B (zh) | 2020-06-05 | 2020-06-05 | 一种实现redis缓存和数据库进行关联的方法及其系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111666305B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416970A (zh) * | 2020-12-03 | 2021-02-26 | 四川长虹电器股份有限公司 | 一种减少关系数据库上的查询数量的方法 |
CN112506961A (zh) * | 2020-12-28 | 2021-03-16 | 浪潮云信息技术股份公司 | 一种提高数据查询效率的方法 |
CN112860960B (zh) * | 2021-03-15 | 2024-02-23 | 北京达佳互联信息技术有限公司 | 数据查询方法及装置 |
CN113139081B (zh) * | 2021-04-27 | 2023-10-27 | 中山亿联智能科技有限公司 | 高效率低延迟上报读取用户在线播放信息的方法 |
CN115878666B (zh) * | 2022-10-31 | 2023-09-12 | 四川川大智胜系统集成有限公司 | 一种缓存依赖关系的管理方法、系统、电子设备及介质 |
CN115952204B (zh) * | 2023-03-14 | 2023-05-16 | 中国西安卫星测控中心 | 一种缓存式SQLite读取方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808643A (zh) * | 2016-02-25 | 2016-07-27 | 浪潮通信信息系统有限公司 | 一种Redis内存数据库刷新的方法 |
CN106997378A (zh) * | 2017-03-13 | 2017-08-01 | 摩贝(上海)生物科技有限公司 | 基于Redis的数据库数据聚合同步的方法 |
CN109284351A (zh) * | 2018-08-14 | 2019-01-29 | 青海大学 | 一种基于HBase数据库的数据查询方法 |
CN111046106A (zh) * | 2019-12-19 | 2020-04-21 | 杭州中恒电气股份有限公司 | 缓存数据同步方法、装置、设备及介质 |
CN111127252A (zh) * | 2019-12-24 | 2020-05-08 | 华中科技大学 | 一种水资源管理决策支持系统的数据管理方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808618B (zh) * | 2014-12-31 | 2019-10-22 | 阿里巴巴集团控股有限公司 | Feed数据的存储和查询方法及其装置 |
-
2020
- 2020-06-05 CN CN202010503899.4A patent/CN111666305B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105808643A (zh) * | 2016-02-25 | 2016-07-27 | 浪潮通信信息系统有限公司 | 一种Redis内存数据库刷新的方法 |
CN106997378A (zh) * | 2017-03-13 | 2017-08-01 | 摩贝(上海)生物科技有限公司 | 基于Redis的数据库数据聚合同步的方法 |
CN109284351A (zh) * | 2018-08-14 | 2019-01-29 | 青海大学 | 一种基于HBase数据库的数据查询方法 |
CN111046106A (zh) * | 2019-12-19 | 2020-04-21 | 杭州中恒电气股份有限公司 | 缓存数据同步方法、装置、设备及介质 |
CN111127252A (zh) * | 2019-12-24 | 2020-05-08 | 华中科技大学 | 一种水资源管理决策支持系统的数据管理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111666305A (zh) | 2020-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111666305B (zh) | 一种实现redis缓存和数据库进行关联的方法及其系统 | |
US7334004B2 (en) | Consistent read in a distributed database environment | |
US8458071B2 (en) | Instantaneous merchant information retrieval for financial transactions | |
EP2410442B1 (en) | Optimizing search for insert-only databases and write-once data storage | |
US5787415A (en) | Low maintenance data delivery and refresh system for decision support system database | |
US20100281005A1 (en) | Asynchronous Database Index Maintenance | |
US20070162414A1 (en) | System and method for using external references to validate a data object's classification / consolidation | |
US20070050333A1 (en) | Archive indexing engine | |
CN102867070A (zh) | 更新key-value分布式存储系统缓存的方法 | |
CN109815240B (zh) | 用于管理索引的方法、装置、设备和存储介质 | |
CN103559307A (zh) | 一种查询的缓存方法及装置 | |
CN109871338B (zh) | 一种数据存储方法、装置及计算机设备 | |
CN104700459B (zh) | 一种提高afc系统终端设备黑名单匹配效率的方法 | |
CN101136765A (zh) | 一种快速访问信息模型的方法 | |
KR102415155B1 (ko) | 데이터 검색 장치 및 방법 | |
CN116881288A (zh) | 一种数据查询方法、装置及设备 | |
CN111723092A (zh) | 数据处理方法及装置 | |
CN110427576B (zh) | 一种基于分享内容的区块链资源值的控制方法及系统 | |
CN103530111A (zh) | 一种流程定义的获取方法及装置 | |
CN110678854A (zh) | 数据查询的方法和装置 | |
CN112463837B (zh) | 一种关系型数据库数据存储查询方法 | |
CN112131455B (zh) | 列表页检索降级方法、装置、电子设备和存储介质 | |
CN111444179B (zh) | 数据处理方法、装置、存储介质及服务器 | |
CN116860722B (zh) | 一种数据库持久化组织优化方法 | |
CN115422183A (zh) | 一种结合多索引策略的广告检索方法、装置及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |