CN111666305A - 一种实现redis缓存和数据库进行关联的方法及其系统 - Google Patents

一种实现redis缓存和数据库进行关联的方法及其系统 Download PDF

Info

Publication number
CN111666305A
CN111666305A CN202010503899.4A CN202010503899A CN111666305A CN 111666305 A CN111666305 A CN 111666305A CN 202010503899 A CN202010503899 A CN 202010503899A CN 111666305 A CN111666305 A CN 111666305A
Authority
CN
China
Prior art keywords
data
key
query
cache
redis
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.)
Granted
Application number
CN202010503899.4A
Other languages
English (en)
Other versions
CN111666305B (zh
Inventor
刘德建
叶伟
郑彬
岳万恕
陈宏展
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujian Tianqing Online Interactive Technology Co Ltd
Original Assignee
Fujian Tianqing Online Interactive Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujian Tianqing Online Interactive Technology Co Ltd filed Critical Fujian Tianqing Online Interactive Technology Co Ltd
Priority to CN202010503899.4A priority Critical patent/CN111666305B/zh
Publication of CN111666305A publication Critical patent/CN111666305A/zh
Application granted granted Critical
Publication of CN111666305B publication Critical patent/CN111666305B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • YGENERAL 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
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE 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/00Energy 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缓存和数据库进行关联的方法及其系统
技术领域
本发明涉及数据库管理技术领域,特别是一种实现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 (8)

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,判断依赖key是否存在数据,如果不存在,则前往mysql数据库查询数据,获得数据data;如果存在则组织redis缓存key,即redis缓存key=k:md5(sql),通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在,则前往mysql数据库查询数据,获得数据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缓存和数据库进行关联的方法,其特征在于:所述步骤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。
4.根据权利要求1所述的一种实现redis缓存和数据库进行关联的方法,其特征在于:所述方法还包括数据库的数据更新,数据更新也分为两种情况,根据主键更新单条数据信息和根据查询条件批量更新;
所述根据主键更新单条数据信息为:根据主键id获得redis缓存key=tbname:id;清理该主键id的redis缓存key的reids缓存,那么在通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存;
所述根据查询条件批量更新为:根据查询条件批量更新,则将依赖key进行清理,即把key=dependency:tb的redis缓存清理,则通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存。
5.一种实现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。
6.根据权利要求5所述的一种实现redis缓存和数据库进行关联的系统,其特征在于:所述主键查询获取数据模块进一步具体为:通过redis缓存key前往redis内存数据库查询,如果存在数据则直接返回获得的数据结果,如果不存在数据,则前往mysql数据库查询数据,获得数据data,如果查询数据不存在直接返回空,如果查询数据存在,则获得数据data后根据所述redis缓存key=tbname:id;把数据data存入redis缓存中,并设置数据过期时间t1,返回数据data。
7.根据权利要求5所述的一种实现redis缓存和数据库进行关联的系统,其特征在于:所述条件查询获取数据模块进一步具体为:判断依赖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。
8.根据权利要求5所述的一种实现redis缓存和数据库进行关联的系统,其特征在于:所述系统还能进行数据库的数据更新,数据更新也分为两种情况,根据主键更新单条数据信息和根据查询条件批量更新;
所述根据主键更新单条数据信息为:根据主键id获得redis缓存key=tbname:id;清理该主键id的redis缓存key的reids缓存,那么在通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存;
所述根据查询条件批量更新为:根据查询条件批量更新,则将依赖key进行清理,即把key=dependency:tb的redis缓存清理,则通过redis缓存key前往redis内存数据库查询的时候,因为缓存失效,则会重新从mysql数据库读取最新数据加入redis缓存。
CN202010503899.4A 2020-06-05 2020-06-05 一种实现redis缓存和数据库进行关联的方法及其系统 Active CN111666305B (zh)

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 true CN111666305A (zh) 2020-09-15
CN111666305B 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)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112416970A (zh) * 2020-12-03 2021-02-26 四川长虹电器股份有限公司 一种减少关系数据库上的查询数量的方法
CN112506961A (zh) * 2020-12-28 2021-03-16 浪潮云信息技术股份公司 一种提高数据查询效率的方法
CN112860960A (zh) * 2021-03-15 2021-05-28 北京达佳互联信息技术有限公司 数据查询方法及装置
CN113139081A (zh) * 2021-04-27 2021-07-20 中山亿联智能科技有限公司 高效率低延迟上报读取用户在线播放信息的方法
CN115878666A (zh) * 2022-10-31 2023-03-31 四川川大智胜系统集成有限公司 一种缓存依赖关系的管理方法、系统、电子设备及介质
CN115952204A (zh) * 2023-03-14 2023-04-11 中国西安卫星测控中心 一种缓存式SQLite读取方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160188749A1 (en) * 2014-12-31 2016-06-30 Alibaba Group Holding Limited Feed Data Storage and Query
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 华中科技大学 一种水资源管理决策支持系统的数据管理方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160188749A1 (en) * 2014-12-31 2016-06-30 Alibaba Group Holding Limited Feed Data Storage and Query
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 华中科技大学 一种水资源管理决策支持系统的数据管理方法

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112416970A (zh) * 2020-12-03 2021-02-26 四川长虹电器股份有限公司 一种减少关系数据库上的查询数量的方法
CN112506961A (zh) * 2020-12-28 2021-03-16 浪潮云信息技术股份公司 一种提高数据查询效率的方法
CN112860960A (zh) * 2021-03-15 2021-05-28 北京达佳互联信息技术有限公司 数据查询方法及装置
CN112860960B (zh) * 2021-03-15 2024-02-23 北京达佳互联信息技术有限公司 数据查询方法及装置
CN113139081A (zh) * 2021-04-27 2021-07-20 中山亿联智能科技有限公司 高效率低延迟上报读取用户在线播放信息的方法
CN113139081B (zh) * 2021-04-27 2023-10-27 中山亿联智能科技有限公司 高效率低延迟上报读取用户在线播放信息的方法
CN115878666A (zh) * 2022-10-31 2023-03-31 四川川大智胜系统集成有限公司 一种缓存依赖关系的管理方法、系统、电子设备及介质
CN115878666B (zh) * 2022-10-31 2023-09-12 四川川大智胜系统集成有限公司 一种缓存依赖关系的管理方法、系统、电子设备及介质
CN115952204A (zh) * 2023-03-14 2023-04-11 中国西安卫星测控中心 一种缓存式SQLite读取方法
CN115952204B (zh) * 2023-03-14 2023-05-16 中国西安卫星测控中心 一种缓存式SQLite读取方法

Also Published As

Publication number Publication date
CN111666305B (zh) 2023-03-14

Similar Documents

Publication Publication Date Title
CN111666305B (zh) 一种实现redis缓存和数据库进行关联的方法及其系统
KR102005831B1 (ko) 범위-기반 검색을 위한 데이터 저장 관리
US6421662B1 (en) Generating and implementing indexes based on criteria set forth in queries
US9639468B2 (en) Temporal clones to identify valid items from a set of items
US5787415A (en) Low maintenance data delivery and refresh system for decision support system database
US8103658B2 (en) Index backbone join
US20100281005A1 (en) Asynchronous Database Index Maintenance
US10007691B2 (en) Prioritizing repopulation of in-memory compression units
US20020194206A1 (en) Consistent read in a distributed database environment
CN106557578B (zh) 历史数据查询方法及系统
US20070050333A1 (en) Archive indexing engine
CN103688259A (zh) 用于通过压缩和纵列存储进行自动数据放置的技术
US10437688B2 (en) Enhancing consistent read performance for in-memory databases
CN102867070A (zh) 更新key-value分布式存储系统缓存的方法
CN109815240B (zh) 用于管理索引的方法、装置、设备和存储介质
CN110637292B (zh) 用于查询资源高速缓存的系统和方法
CN113420052B (zh) 一种多级分布式缓存系统及方法
CN106599152A (zh) 一种数据缓存方法及系统
CN108647266A (zh) 一种异构数据快速分布存储、交互方法
US20060212416A1 (en) Method for processing data to optimize and categorize matches
US6466942B1 (en) Using indexes to retrieve stored information
CN109871338B (zh) 一种数据存储方法、装置及计算机设备
CN104700459B (zh) 一种提高afc系统终端设备黑名单匹配效率的方法
KR102415155B1 (ko) 데이터 검색 장치 및 방법
CN101136765A (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