CN105955971B - 一种键值缓存的实现方法及装置 - Google Patents
一种键值缓存的实现方法及装置 Download PDFInfo
- Publication number
- CN105955971B CN105955971B CN201510861869.XA CN201510861869A CN105955971B CN 105955971 B CN105955971 B CN 105955971B CN 201510861869 A CN201510861869 A CN 201510861869A CN 105955971 B CN105955971 B CN 105955971B
- Authority
- CN
- China
- Prior art keywords
- key
- key assignments
- memory address
- assignments table
- address
- 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
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/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/176—Support for shared access to files; File sharing support
- G06F16/1767—Concurrency control, e.g. optimistic or pessimistic approaches
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Storage Device Security (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种键值缓存的实现方法及装置,包括:获取键值表名以及键key,并根据所述键值表名确定与所述键值表名对应的键值表共享内存段;根据所述key确定位于所述键值表共享内存段中的内存地址,并在确定所述内存地址指向的访问目标中包括所述key时,确定需要对所述内存地址进行操作的业务进程的进程号;通过CAS原子操作将所述内存地址的状态标识修改为所述进程号;若修改成功,则根据所述业务进程对所述访问目标进行业务处理,若修改失败,则判断修改次数是否达到阈值,若修改次数达到阈值,则确定访问失败,若修改次数未达到阈值,则返回所述通过CAS原子操作将所述内存地址的状态标识修改为所述进程号的步骤。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种键值缓存的实现方法及其装置。
背景技术
数据的存储于访问是计算机应用中最普遍的需求,特别是在银行等行业中,对数据存储的实时性和健壮性要求越来越高。
现有的技术中,在对数据库进行操作时,通常采用悲观锁。当冲突发生时,需要等待内核的时间片管理、调度机制对进程的选择、进程对唤醒的响应等步骤,这些都比较耗时,在读写都特别频繁的业务中,冲突处理耗时特别多,从而降低了访问数据库的速度。
发明内容
本发明实施例提供一种键值缓存的实现方法及其装置,用以提供一种实现高效并发访问数据库的同时,保证对数据读写的一致性。
本发明实施例提供一种键值缓存的实现方法,包括:
获取键值表名以及键key,并根据所述键值表名确定与所述键值表名对应的键值表共享内存段;
根据所述key确定位于所述键值表共享内存段中的内存地址,并在确定所述内存地址指向的访问目标中包括所述key时,确定需要对所述内存地址进行操作的业务进程的进程号;
通过CAS原子操作将所述内存地址的状态标识修改为所述进程号;
若修改成功,则根据所述业务进程对所述访问目标进行业务处理,若修改失败,则判断修改次数是否达到阈值,若修改次数达到阈值,则确定访问失败,若修改次数未达到阈值,则返回所述通过CAS原子操作将所述内存地址的状态标识修改为所述进程号的步骤。
优选的,所述根据所述键值表名确定与所述键值表名对应的键值表共享内存段,包括:
通过第一哈希函数对所述键值表名进行哈希运算获得第一键值表哈希值;
通过第二哈希函数对所述键值表名进行哈希运算获得第二键值表哈希值;
将所述第一键值表哈希值作为所述键值表名对应的键值表共享内存段的待验证入口地址,并确定所述待验证入口地址指向的数据中的第三键值表哈希值与所述第二键值表哈希值是否相等,若相等则将所述待验证入口地址作为所述键值表共享内存段的入口地址,并根据所述键值表共享内存段的入口地址确定所述键值表共享内存段。
优选的,所述根据所述key确定位于所述键值表共享内存中的内存地址,包括:
对所述key进行哈希运算获得值value,并将所述value作为所述内存地址。
优选的,若确定所述内存地址指向的访问目标中不包括所述key,则执行以下步骤:
步骤一、确定所述内存地址是否存在下一跳内存地址,若存在,则转至步骤二,否则,确定所述键值表共享内存段中不存在所述key对应的内存地址;
步骤二、确定所述下一跳内存地址中是否包括所述key,若不包括所述key,则返回步骤一,若包括所述key,则将所述下一跳内存地址作为所述key对应的内存地址。
优选的,所述根据所述业务进程对所述访问目标进行处理之后,还包括:
确定所述内存地址的状态标识是否等于所述进程号,若是,则通过所述CAS原子操作将所述内存地址的状态标识修改为原值,以完成对所述内存地址的解锁。
本发明实施例提供一种键值缓存的实现装置,包括:
获取单元,用于获取键值表名以及键key,并根据所述键值表名确定与所述键值表名对应的键值表共享内存段;
确定单元,用于根据所述key确定位于所述键值表共享内存段中的内存地址,并在确定所述内存地址指向的访问目标中包括所述key时,确定需要对所述内存地址进行操作的业务进程的进程号;
加锁单元,用于通过CAS原子操作将所述内存地址的状态标识修改为所述进程号;若修改成功,则根据所述业务进程对所述访问目标进行业务处理,若修改失败,则判断修改次数是否达到阈值,若修改次数达到阈值,则确定访问失败,若修改次数未达到阈值,则返回所述通过CAS原子操作将所述内存地址的状态标识修改为所述进程号的步骤。
优选的,所述获取单元具体用于:
通过第一哈希函数对所述键值表名进行哈希运算获得第一键值表哈希值;
通过第二哈希函数对所述键值表名进行哈希运算获得第二键值表哈希值;
将所述第一键值表哈希值作为所述键值表名对应的键值表共享内存段的待验证入口地址,并确定所述待验证入口地址指向的数据中的第三键值表哈希值与所述第二键值表哈希值是否相等,若相等则将所述待验证入口地址作为所述键值表共享内存段的入口地址,并根据所述键值表共享内存段的入口地址确定所述键值表共享内存段。
优选的,所述确定单元具体用于:
对所述key进行哈希运算获得值value,并将所述value作为所述内存地址。
优选的,所述确定单元还用于:
若确定所述内存地址指向的访问目标中不包括所述key,则执行以下步骤:
步骤一、确定所述内存地址是否存在下一跳内存地址,若存在,则转至步骤二,否则,确定所述键值表共享内存段中不存在所述key对应的内存地址;
步骤二、确定所述下一跳内存地址中是否包括所述key,若不包括所述key,则返回步骤一,若包括所述key,则将所述下一跳内存地址作为所述key对应的内存地址。
优选的,所述加锁单元还用于:
确定所述内存地址的状态标识是否等于所述进程号,若是,则通过所述CAS原子操作将所述内存地址的状态标识修改为原值,以完成对所述内存地址的解锁。
本发明有益效果如下:
本发明实施例实现了将键值数据存放在共享内存中,作为静态库提供给其他业务进程使用,使得共享内存中的键值数据的生命周期不依赖进程的生命周期,提供系统的效率。同时,本发明实施例中,互斥操作采用CAS原子操作实现,有效的解决了并发冲突的问题。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种键值缓存的实现方法流程示意图;
图2为本发明实施例提供的一种表控制结构的结构示意图;
图3为本发明实施例提供的一种内存池的结构示意图;
图4为本发明实施例提供的一种内存池的结构示意图;
图5为本发明实施例提供的一种键值缓存的实现装置结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
本发明实施例中,通过键值(Key-Value)数据库存储数据。键值数据库中,每个key对应一个value,value可以作为内存地址,可以指向key对应的访问目标,从而可以实现快速访问数据。
本发明实施例中,key是所述key对应的访问目标中的一部分。举例来说,访问目标为由手机号、银行卡号、地址、邮编组成的一段数据,那么访问目标中的手机号、银行卡号、地址、邮编均可以作为key,可以将该访问目标存储于经过key哈希运算后获得的value的值指向的内存中。
本发明实施例中,在访问键值数据库之前,先在配置文件中规划键值数据库使用共享内存的起始key值和大小。随后,管理进程根据确定需要使用的共享内存的大小向操作系统申请相应大小的共享内存段,作为键值数据库实例共享内存段,此键值数据库实例共享内存段存储全局控制信息、键值表的名称和键值数据库中的key信息。
管理进程可以根据业务需要创建键值表共享内存段,键值表共享内存段中存储键值表控制信息,包括哈希索引,数据区共享内存中key的范围。
业务进程根据配置文件挂载键值数据库实例的共享内存段,根据键值数据库实例共享内存段中存储全局控制信息挂载所有键值表对应的键值表共享内存,根据各键值表共享内存中存储的键值表控制信息挂载所有键值表的数据共享内存段。
基于上述描述,如图1所述,为本发明实施例提供的一种键值缓存的实现方法流程示意图。
参见图1,该方法包括:
步骤101:获取键值表名以及键key,并根据所述键值表名确定与所述键值表名对应的键值表共享内存段;
步骤102:根据所述key确定位于所述键值表共享内存段中的内存地址,并在确定所述内存地址指向的访问目标中包括所述key时,确定需要对所述内存地址进行操作的业务进程的进程号;
步骤103:通过CAS原子操作将所述内存地址的状态标识修改为所述进程号;若修改成功,则根据所述业务进程对所述访问目标进行处理,若修改失败,则判断修改次数是否达到阈值,若修改次数达到阈值,则确定访问失败,若修改次数未达到阈值,则返回所述通过CAS原子操作将所述内存地址的状态标识修改为所述进程号的步骤。
步骤101中,键值数据库实例共享内存段中可能存在多个键值表共享内存段,本发明实施例中通过对键值表名进行哈希运算,获得与键值表名对应的键值表哈希值,从而确定出与所述键值表名对应的键值表共享内存段。
为了避免哈希冲突,本发明实施例中通过对一个键值表名进行多次哈希运算,获得多个哈希值,并根据获得的哈希值进行验证,从而避免哈希冲突。
具体的,通过第一哈希函数对所述键值表名进行哈希运算获得第一键值表哈希值;通过第二哈希函数对所述键值表名进行哈希运算获得第二键值表哈希值;将所述第一键值表哈希值作为所述键值表名对应的键值表共享内存段的待验证入口地址,并确定所述待验证入口地址指向的数据中的第三键值表哈希值与所述第二键值表哈希值是否相等,若相等则将所述待验证入口地址作为所述键值表共享内存段的入口地址。若确定所述待验证入口地址指向的数据中的第三键值表哈希值与所述第二键值表哈希值不相等,则执行下述步骤:步骤一、确定所述待验证入口地址是否存在下一跳内存地址,若存在,则将所述待验证入口地址的值加1,获得下一跳待验证入口地址,否则,确定不存在与所述键值表名对应的键值表共享内存段;步骤二、确定所述下一跳待验证入口地址指向的数据中的第四键值表哈希值与所述第二键值表哈希值是否相等,若相等,则将所述下一跳待验证入口地址作为所述键值表共享内存段的入口地址,否则,返回步骤一。
最后根据键值表共享内存段的入口地址可以确定所述键值表共享内存段。本发明实施例中,键值表共享内存段的入口地址可以指向存储该键值表名的表控制结构。表控制结构中除了键值表名之外,还可能包括hash信息,如hash的最大个数,当前使用的hash个数,hash的起始地址偏移等信息;pool(内存池)信息,如pool的最大个数,当前使用pool的个数,pool的起始地址偏移等信息;hash map(哈希图)信息,hash map中可以包括由键值表名中的key计算出的value,以及value对应的状态标识,value对应的状态标识为默认值时,表示该value对应的地址指向的数据处于解锁状态。
具体的,如图2所示,为本发明实施例提供的一种表控制结构的结构示意图。图2中,表控制结构中可以包括键值表名(Table_name),为对键值表操作的定位参数;键值表信息(table_info),可以包括键值表的起始偏移地址等信息;键值表状态(table_status);键值表状统计信息(table_statics);内存池信息(Pool_info),其中可以包括pool的最大个数,当前使用的pool的个数,pool的起始地址偏移等;还可以包括每个内存池的内存池链表头(pool_list),并通过pool_list对应的头指针(head)指向内存池的池头(pool_head)。同时,表控制结构中还可以包括哈希信息(Hash_info),其中可以包括hash最大个数,当前使用的个数,hash起始地址偏移等信息,Hash_info中可以通过hash_list的对应的头指针(head)指向内存池中一个记录(page_data)的page_next,从而指示出一个page_data位于内存池中的位置。
如图3所示,为本发明实施例提供的一种内存池的结构示意图。图3中,内存池包括一个池头(pool_head)以及多个记录(page_data),每个page_data包括两个指针:rec_next和page_next。存储在内存池中的一个内存池数据可以包括多个page_data,因此,可以用rec_next指向内存池中下一个内存池数据所包括的第一个page_data,用page_next指向与该记录属于同一个内存池数据的下一个记录。
举例来说,结合图2及图3,如图4所示,为本发明实施例提供的一种内存池的结构示意图。图4中,内存池中包括12个page_data,内存池数据R1包括两个page_data,分别为第1个page_data和第4个page_data;内存池数据R2包括两个page_data,分别为第5个page_data和第8个page_data。通过表控制结构中pool_list对应的头指针(head)可以确定内存池的pool_head,然后通过指向第1个page_data的hash_list的对应的head指示出组成R1的第1个page_data,然后根据第1个page_data的page_next指示出组成R1的第2个page_data,即内存池中第4个page_data。还可以根据组成R1的第1个page_data(即内存池中第1个page_data)的rec_next指示出组成R2的第1个page_data(即内存池中第5个page_data),然后根据组成R2的第1个page_data(即内存池中第5个page_data)的page_next指示出组成R2的第2个page_data,即内存池中第8个page_data。
一张键值表中可以只存储一种类型的key-value值,即key和value都是固定长度的。
进一步的,还可以通过键值表名进行三次哈希运算,获得三个键值表哈希值,从而进一步减少哈希冲突。具体过程,可以参考上面的描述,在此不再赘述。
步骤102中,在确定出的键值表共享内存段中,确定与所述key对应的访问目标对应的内存地址。
可以直接对所述key进行哈希运算获得值value,并将所述value作为所述内存地址。由于在本发明实施例中,key是所述key对应的访问目标中的一部分,如果所述内存地址指向的访问目标中包括所述key,则可以确定已经找到正确的访问目标。
若确定所述内存地址指向的访问目标中不包括所述key,则说明存在多个不同的key通过哈希运算获得相同的value,使得key对应的内存地址发生冲突,导致所述key对应的访问目标并没有存储在所述key对应的value指向的内存中。
本发明实施例中,在进行数据存储时,若发现根据key进行哈希运算确定出的内存地址被使用,则确定该key进行哈希运算出的内存地址的下一跳内存地址是否被使用,如果未被使用,则将该key对应的访问目的存储在该下一跳内存地址所指向的内存中,否则,继续循环该过程,直至找到一个未被使用的内存地址。
根据上面的描述,本发明实施例中,若确定所述内存地址指向的访问目标中不包括所述key,则可以执行以下步骤:
步骤一、确定所述内存地址是否存在下一跳内存地址,若存在,则转至步骤二,否则,确定所述键值表共享内存段中不存在所述key对应的内存地址;
步骤二、确定所述下一跳内存地址中是否包括所述key,若不包括所述key,则返回步骤一,若包括所述key,则将所述下一跳内存地址作为所述key对应的内存地址。
步骤103中,为了避免多个线程并发时对同一个访问目标进行操作,而发生冲突,从而使得其他进程需要等待内核的时间片管理、调度机制对进程的选择、进程对唤醒的响应等步骤,导致冲突处理耗时时间较长,使得系统性能无法满足要求,本发明实施例中,采用CAS(Compare&Set,比较&设置)原子操作解决冲突。
采用CAS原子操作时,当多个进程尝试更新同一个访问目标时,只有其中一个进程能更新访问目标,而其它进程都失败,失败的进程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试,从而提高了系统的性能。
通过CAS原子操作将所述内存地址的状态标识修改为所述进程号;若修改成功,则根据所述业务进程对所述访问目标进行处理,若修改失败,则判断修改次数是否达到阈值,若修改次数达到阈值,则确定访问失败,若修改次数未达到阈值,则返回所述通过CAS原子操作将所述内存地址的状态标识修改为所述进程号的步骤。
本发明实施例中,所述阈值可以为5次,也可以根据实际情况设置,在此不再赘述。
根据所述业务进程对所述访问目标进行处理可以包括多种操作,例如,可以对访问目标进行查询、删除、增加、更改等操作。
举例来说,根据所述业务进程对所述访问目标进行查询操作,此时,在根据所述key确定出访问目标之后,将访问目标复制,并传递至查询界面,从而完成查询操作。
举例来说,根据所述业务进程对所述访问目标进行更改操作,则在根据所述key确定出访问目标之后,按照需求对访问目标进行更改,从而完成更改操作。
根据所述业务进程对所述访问目标进行处理之后,还需要对内存地址进行解锁,使得其他业务进程能够访问所述访问目标。
解锁过程中,先确定所述内存地址的状态标识是否等于所述进程号,若是,则通过所述CAS原子操作将所述内存地址的状态标识修改为原值,以完成对所述内存地址的解锁。若确定所述内存地址的状态标识不等于所述进程号,则确定解锁失败。
基于相同的技术构思,本发明实施例还提供一种键值缓存的实现装置,该装置可执行上述方法实施例。
如图5所示,本发明实施例提供一种键值缓存的实现装置结构示意图,包括:
获取单元201,用于获取键值表名以及键key,并根据所述键值表名确定与所述键值表名对应的键值表共享内存段;
确定单元202,用于根据所述key确定位于所述键值表共享内存段中的内存地址,并在确定所述内存地址指向的访问目标中包括所述key时,确定需要对所述内存地址进行操作的业务进程的进程号;
加锁单元203,用于通过CAS原子操作将所述内存地址的状态标识修改为所述进程号;若修改成功,则根据所述业务进程对所述访问目标进行业务处理,若修改失败,则判断修改次数是否达到阈值,若修改次数达到阈值,则确定访问失败,若修改次数未达到阈值,则返回所述通过CAS原子操作将所述内存地址的状态标识修改为所述进程号的步骤。
优选的,所述获取单元201具体用于:
通过第一哈希函数对所述键值表名进行哈希运算获得第一键值表哈希值;
通过第二哈希函数对所述键值表名进行哈希运算获得第二键值表哈希值;
将所述第一键值表哈希值作为所述键值表名对应的键值表共享内存段的待验证入口地址,并确定所述待验证入口地址指向的数据中的第三键值表哈希值与所述第二键值表哈希值是否相等,若相等则将所述待验证入口地址作为所述键值表共享内存段的入口地址,并根据所述键值表共享内存段的入口地址确定所述键值表共享内存段。
优选的,所述确定单元202具体用于:
对所述key进行哈希运算获得值value,并将所述value作为所述内存地址。
优选的,所述确定单元202还用于:
若确定所述内存地址指向的访问目标中不包括所述key,则执行以下步骤:
步骤一、确定所述内存地址是否存在下一跳内存地址,若存在,则转至步骤二,否则,确定所述键值表共享内存段中不存在所述key对应的内存地址;
步骤二、确定所述下一跳内存地址中是否包括所述key,若不包括所述key,则返回步骤一,若包括所述key,则将所述下一跳内存地址作为所述key对应的内存地址。
优选的,所述加锁单元203还用于:
确定所述内存地址的状态标识是否等于所述进程号,若是,则通过所述CAS原子操作将所述内存地址的状态标识修改为原值,以完成对所述内存地址的解锁。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的范围。这样,倘若本发明的这些修改和变型属于本发明权利要求的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (8)
1.一种键值缓存的实现方法,其特征在于,该方法包括:
获取键值表名以及键key,并根据所述键值表名确定与所述键值表名对应的键值表共享内存段;具体的,通过第一哈希函数对所述键值表名进行哈希运算获得第一键值表哈希值;通过第二哈希函数对所述键值表名进行哈希运算获得第二键值表哈希值;将所述第一键值表哈希值作为所述键值表名对应的键值表共享内存段的待验证入口地址,并确定所述待验证入口地址指向的数据中的第三键值表哈希值与所述第二键值表哈希值是否相等,若相等则将所述待验证入口地址作为所述键值表共享内存段的入口地址,并根据所述键值表共享内存段的入口地址确定所述键值表共享内存段;
根据所述key确定位于所述键值表共享内存段中的内存地址,并在确定所述内存地址指向的访问目标中包括所述key时,确定需要对所述内存地址进行操作的业务进程的进程号;
通过CAS原子操作将所述内存地址的状态标识修改为所述进程号;
若修改成功,则根据所述业务进程对所述访问目标进行业务处理,若修改失败,则判断修改次数是否达到阈值,若修改次数达到阈值,则确定访问失败,若修改次数未达到阈值,则返回所述通过CAS原子操作将所述内存地址的状态标识修改为所述进程号的步骤。
2.如权利要求1所述的方法,其特征在于,所述根据所述key确定位于所述键值表共享内存段中的内存地址,包括:
对所述key进行哈希运算获得值value,并将所述value作为所述内存地址。
3.如权利要求1所述的方法,其特征在于,若确定所述内存地址指向的访问目标中不包括所述key,则执行以下步骤:
步骤一、确定所述内存地址是否存在下一跳内存地址,若存在,则转至步骤二,否则,确定所述键值表共享内存段中不存在所述key对应的内存地址;
步骤二、确定所述下一跳内存地址中是否包括所述key,若不包括所述key,则返回步骤一,若包括所述key,则将所述下一跳内存地址作为所述key对应的内存地址。
4.如权利要求1所述的方法,其特征在于,所述根据所述业务进程对所述访问目标进行处理之后,还包括:
确定所述内存地址的状态标识是否等于所述进程号,若是,则通过所述CAS原子操作将所述内存地址的状态标识修改为原值,以完成对所述内存地址的解锁。
5.一种键值缓存的实现装置,其特征在于,该装置包括:
获取单元,用于获取键值表名以及键key;
确定单元,用于根据所述键值表名确定与所述键值表名对应的键值表共享内存段;具体的,通过第一哈希函数对所述键值表名进行哈希运算获得第一键值表哈希值;通过第二哈希函数对所述键值表名进行哈希运算获得第二键值表哈希值;将所述第一键值表哈希值作为所述键值表名对应的键值表共享内存段的待验证入口地址,并确定所述待验证入口地址指向的数据中的第三键值表哈希值与所述第二键值表哈希值是否相等,若相等则将所述待验证入口地址作为所述键值表共享内存段的入口地址,并根据所述键值表共享内存段的入口地址确定所述键值表共享内存段;
所述确定单元,用于根据所述key确定位于所述键值表共享内存段中的内存地址,并在确定所述内存地址指向的访问目标中包括所述key时,确定需要对所述内存地址进行操作的业务进程的进程号;
加锁单元,用于通过CAS原子操作将所述内存地址的状态标识修改为所述进程号;若修改成功,则根据所述业务进程对所述访问目标进行业务处理,若修改失败,则判断修改次数是否达到阈值,若修改次数达到阈值,则确定访问失败,若修改次数未达到阈值,则返回所述通过CAS原子操作将所述内存地址的状态标识修改为所述进程号的步骤。
6.如权利要求5所述的装置,其特征在于,所述确定单元具体用于:
对所述key进行哈希运算获得值value,并将所述value作为所述内存地址。
7.如权利要求5所述的装置,其特征在于,所述确定单元还用于:
若确定所述内存地址指向的访问目标中不包括所述key,则执行以下步骤:
步骤一、确定所述内存地址是否存在下一跳内存地址,若存在,则转至步骤二,否则,确定所述键值表共享内存段中不存在所述key对应的内存地址;
步骤二、确定所述下一跳内存地址中是否包括所述key,若不包括所述key,则返回步骤一,若包括所述key,则将所述下一跳内存地址作为所述key对应的内存地址。
8.如权利要求5所述的装置,其特征在于,所述加锁单元还用于:
确定所述内存地址的状态标识是否等于所述进程号,若是,则通过所述CAS原子操作将所述内存地址的状态标识修改为原值,以完成对所述内存地址的解锁。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510861869.XA CN105955971B (zh) | 2015-11-30 | 2015-11-30 | 一种键值缓存的实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510861869.XA CN105955971B (zh) | 2015-11-30 | 2015-11-30 | 一种键值缓存的实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105955971A CN105955971A (zh) | 2016-09-21 |
CN105955971B true CN105955971B (zh) | 2019-09-17 |
Family
ID=56917171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510861869.XA Active CN105955971B (zh) | 2015-11-30 | 2015-11-30 | 一种键值缓存的实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105955971B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109298935B (zh) * | 2018-09-06 | 2023-02-03 | 华泰证券股份有限公司 | 一种多进程单写多读无锁共享内存的方法及应用 |
CN109388508B (zh) * | 2018-10-10 | 2021-02-26 | 杭州安恒信息技术股份有限公司 | 一种实现零依赖的嵌入式cache共享系统和方法 |
CN112799978B (zh) * | 2021-01-20 | 2023-03-21 | 网易(杭州)网络有限公司 | 缓存设计管理方法、装置、设备和计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103001878A (zh) * | 2012-11-26 | 2013-03-27 | 中兴通讯股份有限公司 | Mac地址哈希冲突的确定方法及装置 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN104268229A (zh) * | 2014-09-26 | 2015-01-07 | 北京金山安全软件有限公司 | 一种基于多进程浏览器的资源获得方法及装置 |
-
2015
- 2015-11-30 CN CN201510861869.XA patent/CN105955971B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103001878A (zh) * | 2012-11-26 | 2013-03-27 | 中兴通讯股份有限公司 | Mac地址哈希冲突的确定方法及装置 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN104268229A (zh) * | 2014-09-26 | 2015-01-07 | 北京金山安全软件有限公司 | 一种基于多进程浏览器的资源获得方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN105955971A (zh) | 2016-09-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10585726B2 (en) | Parameter-sharing apparatus and method | |
CN101739298B (zh) | 共享缓存管理方法和系统 | |
CN102902573B (zh) | 一种基于共享资源的任务的处理方法及装置 | |
CN104115134B (zh) | 用于管理对复合数据存储设备进行访问的方法和系统 | |
CN104750720B (zh) | 多线程并发访问环境下高性能数据处理的实现 | |
CN106202548A (zh) | 数据存储方法、查找方法及装置 | |
CN105955971B (zh) | 一种键值缓存的实现方法及装置 | |
CN103257888A (zh) | 一种对缓冲队列并发执行读、写访问的方法和设备 | |
CN105320608A (zh) | 用于控制存储器设备处理访问请求的存储器控制器和方法 | |
CN103544153A (zh) | 一种基于数据库的数据更新方法和系统 | |
CN110675255B (zh) | 在区块链中并发执行交易的方法和装置 | |
EP3079077A1 (en) | Graph data query method and device | |
CN107391600A (zh) | 用于在内存中存取时序数据的方法和装置 | |
CN106326398A (zh) | 数据一致性对比的方法及装置 | |
CN107665219A (zh) | 一种日志管理方法及装置 | |
WO2017131784A1 (en) | Hybrid concurrency control | |
CN108182244A (zh) | 一种基于多层次列式存储结构的时序数据存储方法 | |
CN104077078B (zh) | 读存储区、更新存储区的方法及装置 | |
US20180329900A1 (en) | Prediction models for concurrency control types | |
DE102013100169A1 (de) | Planen und Ausführung einer Rechenaufgabe | |
CN110706108B (zh) | 在区块链中并发执行交易的方法和装置 | |
CN107622059A (zh) | 一种提高数据库搜索效率的方法和系统 | |
CN106897224A (zh) | 一种软件测试范围的确定方法及装置 | |
CN107967335B (zh) | 一种分布式sql处理方法及系统 | |
CN115237097A (zh) | 自动驾驶仿真测试方法、装置、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |