CN114390069B - 基于分布式缓存的数据访问方法与系统、设备及存储介质 - Google Patents
基于分布式缓存的数据访问方法与系统、设备及存储介质 Download PDFInfo
- Publication number
- CN114390069B CN114390069B CN202210114524.8A CN202210114524A CN114390069B CN 114390069 B CN114390069 B CN 114390069B CN 202210114524 A CN202210114524 A CN 202210114524A CN 114390069 B CN114390069 B CN 114390069B
- Authority
- CN
- China
- Prior art keywords
- data
- accessed
- cache
- cache node
- target 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
- 238000000034 method Methods 0.000 title claims abstract description 52
- 238000004590 computer program Methods 0.000 claims description 13
- 239000003607 modifier Substances 0.000 claims 2
- 230000001360 synchronised effect Effects 0.000 claims 2
- 238000004422 calculation algorithm Methods 0.000 description 17
- 238000004364 calculation method Methods 0.000 description 16
- 238000005034 decoration Methods 0.000 description 11
- 238000004891 communication Methods 0.000 description 6
- 230000008030 elimination Effects 0.000 description 4
- 238000003379 elimination reaction Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 3
- 230000008569 process Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000007423 decrease Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000010979 ruby Substances 0.000 description 1
- 229910001750 ruby Inorganic materials 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- 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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- 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/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
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)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及一种基于分布式缓存的数据访问方法与系统、电子设备及存储介质。该数据访问方法包括:基于待访问数据的缓存节点标识,从多个缓存节点中查找所述标识对应的目标缓存节点;基于所述目标缓存节点,对所述待访问数据进行数据访问。本发明通过利用目标缓存节点的标识快速查找目标缓存节点并利用缓存的快速访问特点实现了对数据的快速访问。
Description
技术领域
本发明涉及分布式缓存领域,更特别地,涉及一种基于分布式缓存的数据访问方法与系统、电子设备及存储介质。
背景技术
随着互联网技术的发展,尤其是电商业务的快速崛起,用户对服务器的访问更加频繁,如果将引用系统部署在单节点服务器上,势必会对单服务器造成巨大的访问压力。
特别是针对高并发场景,在大量用户同时访问服务器而数据是集中存储的情况下,这会极大地影响用户的访问速度,从而影响用户体验。因此,需要一种高效的数据访问方法。
发明内容
针对现有技术中的问题,本发明提供一种基于分布式缓存的数据访问方法与系统、电子设备及存储介质。
第一方面,本发明提供一种基于分布式缓存的数据访问方法,所述基于分布式缓存的数据访问方法包括:
基于待访问数据的缓存节点标识,从多个缓存节点中查找所述标识对应的目标缓存节点;
基于所述目标缓存节点,对所述待访问数据进行数据访问。
进一步地,所述基于分布式缓存的数据访问方法包括:
如果所述目标缓存节点中存在所述待访问数据,则从所述目标缓存节点中读取所述待访问数据;
如果所述目标缓存节点中不存在所述待访问数据,则计算所述待访问数据并将所述待访问数据存储在所述目标缓存节点中。
进一步地,所述计算所述待访问数据并将所述待访问数据存储在所述目标缓存节点中,包括:
如果同时存在多个待访问数据且所述多个待访问数据相同,则计算所述多个待访问数据中的一个,并将所述多个待访问数据中的一个存储在所述目标缓存节点中。
进一步地,所述计算所述待访问数据并将所述待访问数据存储在所述目标缓存节点中,包括:
如果同时存在多个待访问数据且所述多个待访问数据不同,则分别同时计算所述多个待访问数据,并将所述多个待访问数据存储在各自对应的目标缓存节点中。
进一步地,所述缓存节点以Map的形式进行数据存储。
进一步地,所述待访问数据对应于一种或多种业务类型。
进一步地,所述基于分布式缓存的数据访问方法还包括:
基于预定策略对所述缓存节点进行内存释放,其中所述预定策略与所述缓存节点的访问时间、所述缓存节点的访问频率和所述缓存节点的剩余容量中的一项或多项相关联。
第二方面,本发明提供一种基于分布式缓存的数据访问系统,所述基于分布式缓存的数据访问系统包括:
目标缓存节点查找单元,用于基于待访问数据的缓存节点标识,从多个缓存节点中查找所述标识对应的目标缓存节点;
数据访问单元,用于基于所述目标缓存节点,对所述待访问数据进行数据访问。
第三方面,本发明提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面中任一项所述基于分布式缓存的数据访问方法的步骤。
第四方面,本发明提供一种非暂态计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现如第一方面中任一项所述基于分布式缓存的数据访问方法的步骤。
本发明基于待访问数据的缓存节点标识从多个缓存节点中查找所述标识对应的目标缓存节点,并基于所述目标缓存节点对所述待访问数据进行数据访问。本发明通过利用目标缓存节点的标识快速查找目标缓存节点并利用缓存的快速访问特点实现了对数据的快速访问。
附图说明
图1是根据本发明实施例的基于分布式缓存的数据访问方法的流程图;
图2是根据本发明实施例的高并发场景中同时存在多个待访问数据的数据访问流程图;
图3是根据本发明实施例的基于分布式缓存的数据访问系统的结构示意图;以及
图4是根据本发明实施例的电子设备的结构示意图。
具体实施方式
为了更清楚地说明本发明或现有技术中的技术方案,以下将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,以下描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
本发明使用的各种术语或短语具有本领域普通技术人员公知的一般含义,即便如此,本发明仍然希望在此对这些术语或短语作更详尽的说明和解释。如果本文涉及的术语和短语有与公知含义不一致的,则以本发明所表述的含义为准;并且如果在本申请中没有定义,则其具有本领域普通技术人员通常理解的含义。
分布式缓存是为了解决数据库服务器和Web服务器之间的瓶颈,如果一个网站流量很大这个瓶颈将会非常明显,每次数据库查询耗费的时间将不容乐观。因此,尤其是对于更新数据以秒级的站点,可以通过各种分布式缓存方案来解决,例如,Redis、MemCache、SSDB等。
以下将以MemCache作为示例描述分布式缓存的数据访问方法,但应注意的是,本发明的数据访问方法不限于MemCache,而是还包括其它缓存方案,例如Redis、SSDB等。
图1示出了根据本发明实施例的基于分布式缓存(例如,MemCache)的数据访问方法的流程图。参照图1,该数据访问方法包括:
步骤101:基于待访问数据的缓存节点标识,从多个缓存节点中查找标识对应的目标缓存节点;
步骤102:基于目标缓存节点,对待访问数据进行数据访问。
在本发明中,MemCache可以被视为分布式内存对象缓存系统,可以用于动态网络应用以减轻数据库的负载。MemCache通过在内存中缓存数据来减少读取数据库的次数,从而提高网站访问的速度。
在本发明中,作为数据缓存的结构,MemCaChe可以被视为存储键值对的HashMap(哈希映射)在内存中对任意的数据所使用的key(键)-value(值)进行存储。MemCache可以应用于Java、C/C++/C#、Perl、Python、PHP、Ruby等大部分程序语言。例如,JAVA提供了各种实现Map(映射)的类,例如,AbstractMap、Attributes、AuthProvider、ConcurrentHashMap、ConcurrentSkipListMap、EnumMap、HashMap、Hashtable、IdentityHashMap、LinkedHashMap、PrinterStateReasons、Properties、Provider、RenderingHints、SimpleBindings、TabularDataSupport、TreeMap、UIDefaults、WeakHashMap等。
在本发明的实施例中,数据可以按照Map的形式进行存储,但是本发明不限于此,而是可以存在其他的形式,例如,String(字符串)、Hash(哈希类型)、Set(集合)、List(链表)、SortedSet(有序集合)等。
根据本发明,在步骤101中,可以基于待访问数据的缓存节点标识,从多个缓存节点中查找标识对应的目标缓存节点。
在分布式系统中,数据分布式地存储在各个服务器中,在访问数据之前,需要查找待访问数据所存储的目标服务器位置(即,目标缓存节点)。
例如,如果待访问的数据为A(即,待访问数据),A对应的Key为A-Key(即,缓存节点标识),则预设的路由算法模块可以根据A-Key与MemCache集群服务器列表(即,多个缓存节点的列表)得到一台服务器编号;由服务器编号得到MemCache及其的IP地址和端口号(即,目标缓存节点)。也就是说,只要查询的是相同的Key,则根据预设的路由算法模块就可以找到同一个目标缓存节点,即,Key可以视为缓存节点的标识。
注意的是,在读缓存之前,需要按照同样的路由算法和服务器列表进行写缓存,这样才能保证读取与写入的数据能够位于同一缓存节点。具体地,MemCache的写流程如下:API(应用程序)输入需要写缓存的数据;API将Key输入路由算法模块,路由算法根据Key和MemCache集群服务器列表得到一台服务器编号;由服务器编号得到MemCache及其的IP地址和端口号;API调用通信模块和指定编号的服务器通信,将数据写入该服务器,完成一次分布式缓存的写操作。
由以上可知,路由算法对服务器集群的管理至关重要,因为路由算法决定着应该访问服务集群中的哪台服务器。以下示出了集中不同的路由算法,例如,余数Hash、一致性Hash算法等。应注意的是,本发明不限于上述几种算法,而是可以包括其它类型的路由算法,只要这些算法能够实现对服务器集群中的服务器进行分配和选择即可。
例如,在余数Hash算法中,待访问数据(例如,str(字符))对应的HashCode(哈希码)是50、服务器的数目是3,取余数得到1,str对应编号为“1”的节点(Node)即Node1,因此路由算法把str路由到Node1服务器上。由于HashCode随机性比较强,所以使用余数Hash路由算法就可以保证缓存数据在整个MemCache服务器集群中有比较均衡的分布。
也就是说,通过余数Hash算法,可以实现缓存数据在服务器集群上的分布较为均匀,不同的服务器(即,缓存节点)之间的负载较为均衡,因此,在这种情况下,对缓存的访问将会比较高效。
然而,在服务器集群扩容的情况下,例如,原始的服务器集群包括3台服务器(即,3个缓存节点),由于需要缓存的数据量很大,需要扩容到四台服务器,仍然利用余数Hash,就可能导致实际上为Node1的缓存节点被计算为Node2,从而导致缓存未命中(由于待访问数据实际在Node1中,而不是在Node2中),这会降低数据的访问速度。为了解决该问题,可以通过模拟请求的方式逐渐预热缓存,使缓存服务器中的数据重新分布,也就是说,可以通过使扩容后的服务器中的数据重新分布,在重新分布之后,读取与写入的缓存节点将能够保持一致,从而实现快速地访问数据。
例如,在一致性Hash算法中,先构造一个一定长度(例如,长度为232)的整数环(也被称为“一致性Hash环”),根据节点名称的Hash值(其分布为[0,232-1])将缓存服务器节点放置在这个Hash环上,然后根据需要缓存的数据的Key值计算得到其Hash值(其分布也为[0,232-1]),然后在Hash环上顺时针查找距离这个Key值的Hash值最近的服务器节点,从而完成Key到服务器的映射查找。也就是说,不同缓存节点分别位于Hash的不同位置,然后Key值根据其HashCode,在Hash环上有一个固定位置,位置固定下之后,Key就会顺时针去寻找离它最近的一个节点,把数据存储在这个节点中。在这种情况下,由于新增节点(即,扩容增加服务器)会影响到Key值的数据,但其影响是有限的,并且随着服务器集群规模扩大,新增节点带来的影响会越小,从而对缓存的访问的效率将会提高。
根据本发明,在步骤102中,可以基于目标缓存节点,对待访问数据进行数据访问。
在本发明的实施例中,可以基于所查找到的目标缓存节点,实现对数据的快速访问。
对数据进行访问包括两种情况:第一种情况,缓存命中,即数据不为空,目标缓存节点中存在待访问数据;第二种情况,缓存未命中,即数据为空,目标缓存节点中不存在待访问数据。
例如,在待访问数据为A的情况下,当在目标缓存节点中对数据进行访问时,如果访问的数据不为空,则目标缓存节点中存在该待访问数据A。
例如,在待访问数据为A的情况下,当在目标缓存节点中对数据进行访问时,如果访问的数据为空,则目标缓存节点中不存在该待访问数据A。
由以上可知,本发明的基于分布式缓存的数据访问方法通过基于待访问数据的缓存节点标识,从多个缓存节点中查找标识对应的目标缓存节点;基于目标缓存节点,对待访问数据进行数据访问。本发明通过利用目标缓存节点的标识快速查找目标缓存节点并利用缓存的快速访问特点实现了对数据的快速访问。
如上所述,在缓存命中(即,目标缓存节点中存在待访问数据)的情况下,可以从该缓存节点中直接读取数据;在缓存未命中(即,目标缓存节点中不存在待访问数据)的情况下,需要对待访问数据进行计算然后存储在该缓存节点中。
例如,在待访问数据为A并且A对应的目标缓存节点为Node1的情况下,如果目标缓存节点Node1中存在待访问数据A,则可以直接读取该数据A。
例如,在待访问数据为A并且A对应的目标缓存节点为Node1的情况,如果目标缓存节点Node1中不存在待访问数据A,则需要计算待访问数据A并将其存储在目标缓存节点Node1中。
利用目标缓存节点的标识快速查找目标缓存节点并利用缓存的快速访问特点实现了对数据的快速访问。然而,在实际中,对于高并发场景,存在同时进行多个数据访问的情况。在这种情况下,如果缓存未命中(即,缓存节点中不存在待访问数据),可以通过对任务的线程进行管理(例如,线程锁)来提高访问效率,实现数据的快速访问。
在本发明的实施例中,在同时存在多个待访问数据并且目标缓存节点中不存在待访问数据的情况下,可以通过一次只进行一个线程的方式来实现,如下所示:
由以上可知,Memoizer1对整个计算方法进行同步,这种方法能确保线程安全性,但会带来一个很明显的可伸缩性问题,即,每次只有一个线程能够执行计算。在这种情况下,如果另一个线程正在计算结果,那么其他调用计算的线程可能被阻塞很长时间,这会降低数据的访问速度。
在本发明的实施例中,在同时存在多个待访问数据并且目标缓存节点中不存在待访问数据的情况下,还可以通过一次进行多个线程的方式来实现,如下所示:
由以上可知,Memoizer2比Memoizer1有着更好的并发行为,多线程可以并发使用,更适用于高并发的场景。也就是说,相比于Memoizer1每次只执行一个线程,Memoizer2可以同时执行多个线程,这将会提高数据的访问速度,但是Memoizer2的问题在于,如果某个线程启动了一个开销很大的计算,而其他线程并不知道这个计算正在进行,那么很可能会重复这个计算,这无疑也会浪费计算资源,并降低数据的访问速度。
在本发明的实施例中,在同时存在多个待访问数据并且目标缓存节点中不存在待访问数据的情况下,还可以通过一次进行多个线程并判断线程是否已经完成的方式来实现,如下所示:
由以上可知,与Memoizer2首先判断某个计算是否已经完成相反,Memoizer3首先检查某个相应的计算是否已经开始。如果还没有启动,那么就将创建一个FutureTask,并注册到Map中,然后启动计算;如果已经启动,则会一直阻塞,直到结果计算出来再将其返回。Memoizer3的具体执行流程如图2所示。
如图2所示,首先获取Future(对应于待访问数据);然后,在存放future的Map中搜索有没有已经其他线程已经创建好的future,如果有(不等于null,即非空),则调用future的get方法,如果已经计算完成,get方法会立刻返回计算结果,否则,get方法会阻塞,直到结果计算出来再将其返回;如果没有已经创建好的future(等于null,即为空),那么就自己创建future进行同样地计算。
由以上可知,利用该方法,如果同时存在多个待访问数据且多个待访问数据相同,仅仅需要计算多个待访问数据中的一个(即,仅仅需要计算一次)并将结果存储在缓存节点中。同时,由以上可知,利用该方法,如果同时存在多个待访问数据且多个待访问数据不同,则可以分别同时计算多个待访问数据并将结果存储在缓存中。
因此,在实际的高并发场景中,如果缓存未命中(即,缓存节点中不存在待访问数据),可以通过对任务的线程进行管理(例如,线程锁)来提高访问效率,实现数据的快速访问。
在实际的高并发场景中,待访问数据的量很大并且数据的业务类型也不相同,如果每一个业务类型的数据都要通过复杂的代码形式来实现缓存,则会变得很繁琐并且不容易维护。因此,为了实现缓存的可扩展性,可以使待访问数据对应于一种或多种业务类型,这可以通过装饰模式来实现。
在本发明中,装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。其包括:装饰对象和真实对象有相同的接口。这样客户端对象就能以和真实对象相同的方式和装饰对象交互;装饰对象包含一个真实对象的引用;装饰对象接受所有来自客户端的请求,它把这些请求转发给真实的对象;装饰对象可以在转发这些请求以前或以后增加一些附加功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外部增加附加的功能。
在本发明的实施例中,装饰模式可以通过以下形式实现:
首先,定义一个Computable接口:
public interface Computable<A,V>{
V compute(A arg)throws Exception;
}
针对需要进行缓存的业务类型,全部实现该Computable接口。
其次,利用上述Memoizer3的方式,通过其中的Future、FutureTask实现一个通用缓存器:
此处,使用putIfAbsent没有用put的原因在于:
如果有两个相同的待访问数据并且缓存中不存在该待访问数据,此时针对该待访问数据计算用户ID(user ID)=1的线程,如果同时调用put方法,那么返回的结果都不会为null,后面还是会创建两个任务去计算相同的值,也就是说,相同的结果会被计算两次,这无疑增加了资源消耗,降低了缓存的访问速度。
如果有两个相同的待访问数据并且缓存中不存在该待访问数据,此时针对该待访问数据计算user ID=1的线程,如果同时调用putIfAbsent方法,当map里面已经有对应的值了,则会返回已有的值,否则,会返回null,也就是说,避免了相同的结果会被计算两次的问题,从而节约了资源,提高了缓存的访问速度。
另外,此处使用while(true){}的原因在于:
future的get方法会由于线程被中断而抛出CancellationException。对于CancellationException的处理是cache.remove(arg,f),也就是将缓存清理掉,然后进入下一个循环,重新计算,直到计算成功,或者抛出ExecutionException。
例如,在两个用户几乎在同一时间访问的情况下,那么两个用户都会去执行耗时操作,而谁执行地更快是未知的。此处,通过while循环,不用去关注到底谁执行地更快的问题,只要当一个用户访问成功,那另一个用户也就可以使用到缓存中的值。
最后,使用装饰模式装饰业务类:
由以上可知,通过使用装饰模式,可以实现缓存的扩展,针对不同业务类型的待访问数据,利用继承的特点,极大地减少了业务类型的重复,有利于后期的维护与更新。
由以上可知,本发明基于待访问数据的缓存节点标识,从多个缓存节点中查找标识对应的目标缓存节点;基于目标缓存节点,对待访问数据进行数据访问。本发明通过利用目标缓存节点的标识快速查找目标缓存节点并利用缓存的快速访问特点实现了对数据的快速访问。
另一方面,通过利用缓存可以降低后端的负载。缓存一些复杂计算或者耗时得出的结果可以降低后端系统对CPU、IO、线程这些资源的需求,让系统运行在一个相对资源健康的环境。
应注意的是,由于缓存所使用的内存空间是有限的,随着缓存数据的扩大,缓存的可用容量将逐渐减小;同时不同的缓存数据访问时间以及访问频率也有所不同,访问频率高的数据或者访问时间比较近的数据往往能够更加充分地发挥缓存的优势。因此,为了进一步地提高数据访问效率,可以对缓存进行动态地释放。
例如,当缓存的剩余可用容量低于阈值时,可以将缓存中的内容清除以恢复缓存空间。
在本发明中,可以基于预定的缓存释放策略来释放缓存。缓存释放策略可以包括失效策略与缓存淘汰策略。
在本发明的实施例中,可以通过失效策略来释放缓存。例如,对缓存的数据(也称为“对象”)设置一个超时时间,避免浪费相对比较稀缺的缓存资源。对于缓存时间的处理有两种,分别是主动失效和被动失效。
在主动失效中,可以通过定时任务或者单独的线程不断地检查缓存中的对象是否失效,如果失效就把这些对象清除掉,从而避免浪费资源。在被动失效中,可以通过访问缓存对象的时候才去检查缓存对象是否失效,如果失效就把这些对象清除掉,从而避免浪费资源。
在本发明的实施例中,还可以通过缓存淘汰(也称为“缓存逐出”)策略来释放缓存。缓存淘汰是指在存储空间不足的情况下,缓存系统主动释放一些缓存对象从而获取更多的存储空间。对于大部分内存型的分布式缓存(非持久化),淘汰策略优先于失效策略,一旦空间不足,缓存对象即使没有过期也会被释放。
以下将描述基于不同淘汰方式的缓存淘汰策略来释放缓存的示例。
(1)先进先出(First In First Out,FIFO)方式,在这种情况下,缓存对象可以以队列的形式存在,如果空间不足,就释放队列头部的(首先缓存)对象。在实施例中,队列可以使用链表来实现。
例如,可以释放首先缓存的对象,相比于后续缓存的对象,首先缓存的对象被访问的概率会相对较低,将该缓存对象剔除之后,保留时间上晚一些被缓存的对象,从而提高缓存的命中率,因此可以提高数据的访问速度。
(2)最近使用(Least Recently Used,LRU)方式,在这种情况下,可以根据对象的访问时间先后来进行淘汰,如果空间不足,会释放最久没有访问的对象(即,距上次访问时间最早的对象)。在实施例,可以使用队列来实现。
例如,可以释放最早访问的对象,相比于最近访问的对象,最早访问的对象被访问的概率会相对较低,将该缓存对象剔除之后,保留访问时间晚一些的对象,从而提高缓存的命中率,因此可以提高数据的访问速度。
(3)LRU-K方式,虽然上述LRU简单,在频繁访问热点数据的时候效率很高,但是如果只是偶尔的批量访问不同的数据,则命中率就会很低。例如,在频繁访问A但是接着访问不同的数据直到A被淘汰,此时再访问A的情况下,则不得不再次把A缓存到内存中,显然这种方式是不太合理的,因为A之前已经访问过很多次了,不应该将其淘汰而把许多仅仅访问一次的数据加入到缓存中。因此,在实施例中,可以使用LRU-K来实现优化。
在实施例中,与LRU中“将最近访问的一次直接加入缓存”不同,在LRU-K中,可以转变为“缓存k次的才加入到缓存”,在这种情况下,可以维护一个历史队列,纪录其数据对应的访问次数,其根据访问次数来进行淘汰,如果访问次数达到了k次才从历史队列中删除并加入到缓存中,缓存按照LRU的规则来淘汰数据。
(4)最近最少使用(Least Frequently Used,LFU)方式,在这种情况下,可以根据最近访问的频率来进行淘汰,如果空间不足,会释放最近访问频率最低的对象。
例如,针对各个缓存对象,通过记录最近的访问频率,由于访问频率最低的对象被访问的概率会相对较低,将该缓存对象剔除之后,保留访问频率相对较高的对象,从而提高缓存的命中率,因此可以提高数据的访问速度。
由以上可知,通过基于预定的缓存释放策略来释放缓存,例如,基于缓存节点的剩余空间、缓存对象的访问时间、缓存对象的访问频率等来释放缓存,可以提高缓存的命中率,因此可以提高数据的访问速度。
图3是根据本发明实施例的基于分布式缓存的数据访问系统的结构示意图。参照图3,基于分布式缓存的数据访问系统300包括:
目标缓存节点查找单元301,用于基于待访问数据的缓存节点标识,从多个缓存节点中查找标识对应的目标缓存节点;
数据访问单元303,用于基于目标缓存节点,对待访问数据进行数据访问。
由以上可知,本发明实施例提供的基于分布式缓存的数据访问系统基于待访问数据的缓存节点标识,从多个缓存节点中查找标识对应的目标缓存节点;基于目标缓存节点,对待访问数据进行数据访问。本发明通过利用目标缓存节点的标识快速查找目标缓存节点并利用缓存的快速访问特点实现了对数据的快速访问。
另一方面,本发明提供了一种电子设备。如图4所示,电子设备400包括处理器401、存储器402、通信接口403和通信总线404。
其中,处理器401、存储器402、通信接口403通过通信总线404完成相互间的通信。
处理器401可以调用存储器402中的逻辑指令,处理器401执行逻辑指令时实现如上所述的本发明实施例所提供的基于分布式缓存的数据访问方法,这种基于分布式缓存的数据访问方法包括:基于待访问数据的缓存节点标识,从多个缓存节点中查找标识对应的目标缓存节点;基于目标缓存节点,对待访问数据进行数据访问。
此外,上述存储器402中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行如上所述的本发明实施例所提供的基于分布式缓存的数据访问方法,这种基于分布式缓存的数据访问方法包括:基于待访问数据的缓存节点标识,从多个缓存节点中查找标识对应的目标缓存节点;基于目标缓存节点,对待访问数据进行数据访问。
另一方面,本发明还提供一种非暂态计算机可读存储介质,该非暂态计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时如上所述的本发明实施例所提供的基于分布式缓存的数据访问方法,这种基于分布式缓存的数据访问方法包括:基于待访问数据的缓存节点标识,从多个缓存节点中查找标识对应的目标缓存节点;基于目标缓存节点,对待访问数据进行数据访问。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机、服务器或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。如,如果用硬件来实现和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路、具有合适的组合逻辑门电路的专用集成电路、可编程门阵列(PGA)、现场可编程门阵列(FPGA)等。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。
流程图中或在此以其他方式描述的任何过程或方法描述可以被理解为,表示包括一个或更多个用于实现定制逻辑功能或过程的步骤的可执行指令的代码的模块、片段或部分,并且本发明的优选实施方式的范围包括另外的实现,其中可以不按所示出或讨论的顺序,包括根据所涉及的功能按基本同时的方式或按相反的顺序,来执行功能,这应被本发明的实施例所属技术领域的技术人员所理解。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (9)
1.一种基于分布式缓存的数据访问方法,其特征在于,包括:
基于待访问数据的缓存节点标识,从多个缓存节点中查找所述标识对应的目标缓存节点;
基于所述目标缓存节点,对所述待访问数据进行数据访问:如果所述目标缓存节点中存在所述待访问数据,则从所述目标缓存节点中读取所述待访问数据;如果所述目标缓存节点中不存在所述待访问数据,则计算所述待访问数据并将所述待访问数据存储在所述目标缓存节点中;
其中,在同时存在多个待访问数据并且所述目标缓存节点中不存在所述待访问数据的情况下,通过synchronized修饰符按照一次只进行一个线程的方式对所述待访问数据进行访问,或者通过ConcurrentHashMap按照一次进行多个线程的方式对所述待访问数据进行访问。
2.根据权利要求1所述的基于分布式缓存的数据访问方法,其特征在于,所述计算所述待访问数据并将所述待访问数据存储在所述目标缓存节点中,包括:
如果同时存在多个待访问数据且所述多个待访问数据相同,则计算所述多个待访问数据中的一个,并将所述多个待访问数据中的一个存储在所述目标缓存节点中。
3.根据权利要求1所述的基于分布式缓存的数据访问方法,其特征在于,所述计算所述待访问数据并将所述待访问数据存储在所述目标缓存节点中,包括:
如果同时存在多个待访问数据且所述多个待访问数据不同,则分别同时计算所述多个待访问数据,并将所述多个待访问数据存储在各自对应的目标缓存节点中。
4.根据权利要求1所述的基于分布式缓存的数据访问方法,其特征在于,所述缓存节点以Map的形式进行数据存储。
5.根据权利要求1所述的基于分布式缓存的数据访问方法,其特征在于,所述待访问数据对应于一种或多种业务类型。
6.根据权利要求1至5中任一项所述的基于分布式缓存的数据访问方法,其特征在于,所述方法还包括:
基于预定策略对所述缓存节点进行内存释放,其中所述预定策略与所述缓存节点的访问时间、所述缓存节点的访问频率和所述缓存节点的剩余容量中的一项或多项相关联。
7.一种基于分布式缓存的数据访问系统,其特征在于,包括:
目标缓存节点查找单元,用于基于待访问数据的缓存节点标识,从多个缓存节点中查找所述标识对应的目标缓存节点;
数据访问单元,用于基于所述目标缓存节点,对所述待访问数据进行数据访问:如果所述目标缓存节点中存在所述待访问数据,则从所述目标缓存节点中读取所述待访问数据;如果所述目标缓存节点中不存在所述待访问数据,则计算所述待访问数据并将所述待访问数据存储在所述目标缓存节点中;
其中,在同时存在多个待访问数据并且所述目标缓存节点中不存在所述待访问数据的情况下,通过synchronized修饰符按照一次只进行一个线程的方式对所述待访问数据进行访问,或者通过ConcurrentHashMap按照一次进行多个线程的方式对所述待访问数据进行访问。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至6任一项所述基于分布式缓存的数据访问方法的步骤。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6任一项所述基于分布式缓存的数据访问方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210114524.8A CN114390069B (zh) | 2022-01-30 | 2022-01-30 | 基于分布式缓存的数据访问方法与系统、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210114524.8A CN114390069B (zh) | 2022-01-30 | 2022-01-30 | 基于分布式缓存的数据访问方法与系统、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114390069A CN114390069A (zh) | 2022-04-22 |
CN114390069B true CN114390069B (zh) | 2024-03-22 |
Family
ID=81204924
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210114524.8A Active CN114390069B (zh) | 2022-01-30 | 2022-01-30 | 基于分布式缓存的数据访问方法与系统、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114390069B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114840562B (zh) * | 2022-07-04 | 2022-11-01 | 深圳市茗格科技有限公司 | 业务数据的分布式缓存方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102130959A (zh) * | 2011-03-22 | 2011-07-20 | 浪潮(北京)电子信息产业有限公司 | 一种实现云存储资源调度的系统及方法 |
CN109976904A (zh) * | 2019-02-25 | 2019-07-05 | 贵州电网有限责任公司 | Redis内存管理在采集系统的处理方法 |
CN110489696A (zh) * | 2019-07-31 | 2019-11-22 | 上海艾融软件股份有限公司 | 缓存更新方法、装置及电子设备、存储介质 |
CN110990483A (zh) * | 2019-11-26 | 2020-04-10 | 上海莉莉丝科技股份有限公司 | 分布式缓存中的缓存节点的数据访问和控制方法及系统 |
-
2022
- 2022-01-30 CN CN202210114524.8A patent/CN114390069B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102130959A (zh) * | 2011-03-22 | 2011-07-20 | 浪潮(北京)电子信息产业有限公司 | 一种实现云存储资源调度的系统及方法 |
CN109976904A (zh) * | 2019-02-25 | 2019-07-05 | 贵州电网有限责任公司 | Redis内存管理在采集系统的处理方法 |
CN110489696A (zh) * | 2019-07-31 | 2019-11-22 | 上海艾融软件股份有限公司 | 缓存更新方法、装置及电子设备、存储介质 |
CN110990483A (zh) * | 2019-11-26 | 2020-04-10 | 上海莉莉丝科技股份有限公司 | 分布式缓存中的缓存节点的数据访问和控制方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114390069A (zh) | 2022-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10176057B2 (en) | Multi-lock caches | |
CN108009008B (zh) | 数据处理方法和系统、电子设备 | |
US6871268B2 (en) | Methods and systems for distributed caching in presence of updates and in accordance with holding times | |
US9229869B1 (en) | Multi-lock caches | |
US20160048476A1 (en) | Data managing system, data managing method, and computer-readable, non-transitory medium storing a data managing program | |
EP3507694B1 (en) | Message cache management for message queues | |
CN105635196B (zh) | 一种获取文件数据的方法、系统和应用服务器 | |
CN108810041A (zh) | 一种分布式缓存系统的数据写入及扩容方法、装置 | |
US10482062B1 (en) | Independent evictions from datastore accelerator fleet nodes | |
CN110069431B (zh) | 基于RDMA和HTM的弹性Key-Value键值对数据存储方法 | |
US9928178B1 (en) | Memory-efficient management of computer network resources | |
CN111930740A (zh) | 一种游戏数据的处理方法、装置、服务器及存储介质 | |
CN108540510B (zh) | 一种云主机创建方法、装置及云服务系统 | |
CN101404649B (zh) | 一种基于cache的数据处理系统及其方法 | |
CN115712583B (zh) | 一种提升分布式缓存跨节点访问性能的方法及装置、介质 | |
WO2019056958A1 (zh) | 一种热点关键字获取方法、装置及服务器 | |
CN114390069B (zh) | 基于分布式缓存的数据访问方法与系统、设备及存储介质 | |
CN107992270B (zh) | 一种多控存储系统全局共享缓存的方法及装置 | |
CN117539915B (zh) | 一种数据处理方法及相关装置 | |
JP7192645B2 (ja) | 情報処理装置、分散処理システム及び分散処理プログラム | |
US11726788B2 (en) | Tuple checkout with notify in coordination namespace system | |
US9129033B1 (en) | Caching efficiency using a metadata cache | |
CN110502535A (zh) | 数据访问方法、装置、设备和存储介质 | |
US8028011B1 (en) | Global UNIX file system cylinder group cache | |
US20210397581A1 (en) | Sparse file system implemented with multiple cloud services |
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 |