[发明专利]用于哈希缓存的方法以及装置在审
申请号: | 202011069352.4 | 申请日: | 2020-09-30 |
公开(公告)号: | CN113297101A | 公开(公告)日: | 2021-08-24 |
发明(设计)人: | 郑晓茵 | 申请(专利权)人: | 阿里云计算有限公司 |
主分类号: | G06F12/0877 | 分类号: | G06F12/0877;G06F12/0893;G06F9/52 |
代理公司: | 北京智信禾专利代理有限公司 11637 | 代理人: | 赵杰 |
地址: | 310024 浙江省*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 缓存 方法 以及 装置 | ||
1.一种用于哈希缓存的方法,包括:
在哈希表中查找出关键码映射的哈希槽,其中,所述哈希表中设置有固定数量的哈希桶,所述哈希桶设置有固定数量的哈希槽,所述哈希槽设置有原子锁;
获取所述关键码映射的哈希槽的原子锁以加锁;
针对所述关键码映射的哈希槽执行访问;
释放所述关键码映射的哈希槽的原子锁。
2.根据权利要求1所述的方法,所述哈希槽设置有哈希标签位,所述在哈希表中查找出关键码映射的哈希槽包括:
通过计算需要访问的关键码的哈希值,确定所述关键码对应的哈希标签,所述哈希标签为所述哈希值的部分取值;
根据所述哈希表中的哈希槽的哈希标签位,查找出与所述关键码对应的哈希标签相同的哈希槽;
从与所述关键码对应的哈希标签相同的哈希槽中,查找出与关键码具有映射关系的哈希槽。
3.根据权利要求1所述的方法,所述哈希槽设置有用于指向键值对对象的指针,所述键值对对象用于存储关键码及对应的值;
所述针对所述关键码映射的哈希槽执行访问包括:
利用所述关键码映射的哈希槽的指针指向的键值对对象,执行所述访问。
4.根据权利要求1-3任一项所述的方法,所述哈希槽设置有最近标识符,所述方法还包括:
在释放所述关键码映射的哈希槽的原子锁之前,将所述关键码映射的哈希槽的最近标识符对应的值设置为真。
5.根据权利要求4所述的方法,所述在哈希表中查找出关键码映射的哈希槽包括:
通过计算需要访问的关键码的哈希值,查找出所述哈希值对应的哈希槽;
在所述访问为写入关键码的情况下,判断查找出的哈希槽中是否存在空哈希槽;
如果查找出的哈希槽中存在空哈希槽,则将所述空哈希槽作为所述关键码映射的哈希槽;
如果查找出的哈希槽中不存在空哈希槽,则从所述关键码映射的哈希桶中查找出最近标识符对应的值为假的哈希槽作为所述关键码映射的哈希槽,且将所述关键码映射的哈希槽中原有关键码的数据逐出。
6.根据权利要求4所述的方法,还包括:
开始对所述哈希表中的哈希槽进行遍历;
判断当前遍历到的哈希槽的最近标识符是否为真或假;
如果当前遍历到的哈希槽的最近标识符为假,判断是否能获取所述当前遍历到的哈希槽的原子锁,如果能获取到当前遍历到的哈希槽的原子锁,则将当前遍历到的哈希槽中的原有关键码的数据逐出;
如果当前遍历到的哈希槽的最近标识符为真,判断是否能获取所述当前遍历到的哈希槽的原子锁,如果能获取到当前遍历到的哈希槽的原子锁,则对当前遍历到的哈希槽的原子锁加锁且将当前遍历到的哈希槽的最近标识符置为假,释放当前遍历到的哈希槽的原子锁;
继续遍历下一哈希槽,返回到所述判断当前遍历到的哈希槽的最近标识符是否为真或假的步骤。
7.根据权利要求6所述的方法,所述开始对所述哈希表中的哈希槽进行遍历包括:当所述哈希缓存对内存资源的占用达到预设开始逐出水位时,开始对所述哈希表中的哈希槽进行遍历;
所述方法还包括:
当所述哈希缓存对内存资源的占用达到预设停止逐出水位时,停止对所述哈希表中的哈希槽进行遍历。
8.根据权利要求7所述的方法,还包括:
接收对所述预设开始逐出水位和/或所述预设停止逐出水位的配置指令;
根据所述配置指令,设置所述预设开始逐出水位和/或所述预设停止逐出水位的值。
9.根据权利要求6所述的方法,还包括:
如果在对所述哈希表完成一次遍历的过程中,没有遍历到最近标识符为假的哈希槽,则从所述哈希表中随机选择哈希槽,获取随机选择到的哈希槽的原子锁,将所述随机选择到的哈希槽中的原有关键码的数据逐出,释放所述随机选择到的哈希槽的原子锁。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于阿里云计算有限公司,未经阿里云计算有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011069352.4/1.html,转载请声明来源钻瓜专利网。