一种内存数据自适应淘汰的方法及其系统与流程
未命名
09-17
阅读:108
评论:0
1.本发明涉及内存处理优化技术领域,特别是一种内存数据自适应淘汰的方法及其系统。
背景技术:
2.在当前互联网的环境下,需要缓存数据的场景越来越多。内存缓存是读取速度最快的缓存方式,但也是最危险的,如果没有对系统内存进行合理的管理,则可能会出现内存溢出、内存泄漏等风险。这些问题不仅会对本系统造成影响,还可能对同一台主机上的其他系统产生负面影响。
技术实现要素:
3.为克服上述问题,本发明的目的是提供一种内存数据自适应淘汰的方法,能够在保证内存使用量不会过大的同时,还能够保证重要数据不会被轻易淘汰。
4.本发明采用以下方案实现:一种内存数据自适应淘汰的方法,所述方法包括如下步骤:
5.步骤s1、在内存中设置一个链表和map字典,链表的每个节点包含三个字段:value值、过期时间expire、指向下一个节点的指针nextnode;所述map字典建立了用户信息的索引;
6.步骤s2、设置一个最大内存使用量max,并记录当前内存使用量,获取某个用户关键字key的值,从map字典中查找是否存在这个key;如果不存在,则返回失败;存在,则进入步骤s3;
7.步骤s3、当累计内存使用量小于最大内存使用量max的50%时采用懒删除,所述懒删除即:获取的key存在,则得到该key对应的节点在链表中的指针,通过指针得到节点数据,判断节点数据的过期时间expire是否已经过期;如果已经过期,则需要将该节点从链表中删除,并从map字典中删除对应的键值对;如果没有过期,则将该节点移到链表头部;
8.步骤s4、当累计内存使用量大于等于最大内存使用量max的50%时,启动一个线程每隔一段时间t毫秒检查一次链表中位数之后的随机n个节点,判断n个节点的过期时间expire是否过期,如果过期,则需要将n个节点从链表中删除,并从map字典中删除对应的键值对;
9.步骤s5、当累计内存使用量已经达到最大内存使用量max时,添加新的节点,表明已经没有更多的内存空间使用,淘汰链表末尾的节点,直到释放出足够的新节点内存容量。
10.进一步的,所述步骤s1中value值用于存储用户下单信息;所述过期时间expire表示此缓存何时失效;指向下一个节点的指针nextnode是用于链接下一个缓存节点,形成链表;所述map字典中包含有key和指针类型value,其中key为string类型,指针类型value为链表指针类型,指向链表节点;map字典建立了用户信息的索引,即将用户名作为键值key,将对应的链表节点作为指针类型value值存储到map字典中;当需要获取任意一个用户的信
息时,只需要通过输入的用户关键字key在map字典中查找到对应的链表节点,即可得到用户下单信息。
11.进一步的,所述步骤s5进一步包括:淘汰链表末尾的节点,即先将节点从链表尾部删除,然后添加的新节点插入链表头部,即把新节点的nextnode指向原有的链表头部。
12.本发明提供了一种内存数据自适应淘汰的系统,所述系统包括:内存设置模块、查找比对模块、懒删除模块、线程删除处理模块、以及释放空间模块;
13.所述内存设置模块,在内存中设置一个链表和map字典,链表的每个节点包含三个字段:value值、过期时间expire、指向下一个节点的指针nextnode;所述map字典建立了用户信息的索引;
14.所述查找比对模块,设置一个最大内存使用量max,并记录当前内存使用量,获取某个用户关键字key的值,从map字典中查找是否存在这个key;如果不存在,则返回失败;存在,则执行所述懒删除模块;
15.所述懒删除模块,当累计内存使用量小于最大内存使用量max的50%时采用懒删除,所述懒删除即:获取的key存在,则得到该key对应的节点在链表中的指针,通过指针得到节点数据,判断节点数据的过期时间expire是否已经过期;如果已经过期,则需要将该节点从链表中删除,并从map字典中删除对应的键值对;如果没有过期,则将该节点移到链表头部;
16.所述线程删除处理模块,当累计内存使用量大于等于最大内存使用量max的50%时,启动一个线程每隔一段时间t毫秒检查一次链表中位数之后的随机n个节点,判断n个节点的过期时间expire是否过期,如果过期,则需要将n个节点从链表中删除,并从map字典中删除对应的键值对;
17.所述释放空间模块,当累计内存使用量已经达到最大内存使用量max时,添加新的节点,表明已经没有更多的内存空间使用,淘汰链表末尾的节点,直到释放出足够的新节点内存容量。
18.进一步的,所述内存设置模块中value值用于存储用户下单信息;所述过期时间expire表示此缓存何时失效;指向下一个节点的指针nextnode是用于链接下一个缓存节点,形成链表;所述map字典中包含有key和指针类型value,其中key为string类型,指针类型value为链表指针类型,指向链表节点;map字典建立了用户信息的索引,即将用户名作为键值key,将对应的链表节点作为指针类型value值存储到map字典中;当需要获取任意一个用户的信息时,只需要通过输入的用户关键字key在map字典中查找到对应的链表节点,即可得到用户下单信息。
19.进一步的,所述释放空间模块的实现方式进一步包括:淘汰链表末尾的节点,即先将节点从链表尾部删除,然后添加的新节点插入链表头部,即把新节点的nextnode指向原有的链表头部。
20.本发明的有益效果在于:本发明的一种内存数据自适应淘汰的方法,能够在保证内存使用量不会过大的同时,还能够保证重要数据不会被轻易淘汰,能够根据实际需求自适应地调整淘汰策略,提高操作系统的稳定性和可靠性。
附图说明
21.图1是本发明的方法流程示意图。
22.图2是本发明的系统框图。
具体实施方式
23.下面结合附图对本发明做进一步说明。
24.请参阅图1所示,本发明提供了一种内存数据自适应淘汰的方法,所述方法包括如下步骤:
25.步骤s1、在内存中设置一个链表和map字典,链表的每个节点包含三个字段:value值、过期时间expire、指向下一个节点的指针nextnode;所述map字典建立了用户信息的索引;所述步骤s1中value值用于存储用户下单信息;所述过期时间expire表示此缓存何时失效;指向下一个节点的指针nextnode是用于链接下一个缓存节点,形成链表;所述map字典中包含有key和指针类型value,其中key为string类型,指针类型value为链表指针类型,指向链表节点;map字典建立了用户信息的索引,即将用户名作为键值key,将对应的链表节点作为指针类型value值存储到map字典中;当需要获取任意一个用户的信息时,只需要通过输入的用户关键字key在map字典中查找到对应的链表节点,即可得到用户下单信息。
26.步骤s2、设置一个最大内存使用量max,并记录当前内存使用量,获取某个用户关键字key的值,从map字典中查找是否存在这个key;如果不存在,则返回失败;存在,则进入步骤s3;
27.步骤s3、当累计内存使用量小于最大内存使用量max的50%时采用懒删除,所述懒删除即:获取的key存在,则得到该key对应的节点在链表中的指针,通过指针得到节点数据,判断节点数据的过期时间expire是否已经过期;如果已经过期,则需要将该节点从链表中删除,并从map字典中删除对应的键值对;如果没有过期,则将该节点移到链表头部;
28.步骤s4、当累计内存使用量大于等于最大内存使用量max的50%时,启动一个线程每隔一段时间t毫秒检查一次链表中位数之后的随机n个节点,判断n个节点的过期时间expire是否过期,如果过期,则需要将n个节点从链表中删除,并从map字典中删除对应的键值对;
29.步骤s5、当累计内存使用量已经达到最大内存使用量max时,添加新的节点,表明已经没有更多的内存空间使用,淘汰链表末尾的节点,直到释放出足够的新节点内存容量;添加的新节点插入链表头部,即把新节点的nextnode指向原有的链表头部。
30.下面结合一具体实施例对本发明做进一步说明:
31.本发明提供了一种内存数据自适应淘汰的方法,该方法为:
32.步骤一、在内存中设置一个链表和map字典,链表的每个节点包含三个字段:value(值)、expire(过期时间)、nextnode(指向下一个节点的指针)。所述map字典中包含有key和指针类型value,map字典key为string类型,value为链表指针类型,指向链表节点,用于快速定位到某个键值对对应的节点。
33.以下举例一个支付系统中的内存使用场景,为了避免用户频繁下单,当用户发起下单请求时,需要在内存中查找和存储用户下单时间,以便判断用户下单间隔是否符合要求。为了方便快速查找和定位,设计一个链表存储用户下单信息,每个链表节点包含三个字
段:value(值)用于存储下单信息,例如下单时间和是否付款等;expire(过期时间)表示此缓存何时失效;nextnode(指向下一个节点的指针)用于链接下一个缓存节点,形成链表。再设计一个map字典key为string类型,value为链表指针类型,指向链表节点。在map字典中建立用户下单信息的索引,即将用户名作为键值key,将对应的链表节点作为value存储到map字典中。当支付系统需要获取某个用户的信息时,只需要通过key在map字典中查找到对应的链表节点,即可得到用户下单信息。
34.步骤二、设置一个最大内存使用量max,并记录当前内存使用量,获取某个key的值时,从map中查找是否存在这个key。如果不存在,则返回失败。
35.为了避免内存溢出,设置了一个最大内存使用量max,并记录当前内存使用量,用于比对内存使用情况。假设用户yewei请求下单,支付系统从map中查找是否存在key=yewei。如果不存在,则返回空,如果存在,则继续执行下一步骤。
36.步骤三、当累计内存使用量小于最大内存使用量max的50%时采用懒删除,该懒删除即获取的key如果存在,则得到该节点在链表中的指针,通过指针得到节点数据,判断节点的过期时间expire是否已经过期。如果已经过期,则需要将该节点从链表中删除,并从map字典中删除对应的键值对。如果没有过期,则将该节点移到链表头部。
37.如:当累计内存使用量小于最大内存使用量max的50%时采用懒删除,即内存缓存数据在被读取时才进行判断是否过期删除。如果从map中查找key=yewei存在则通过value存储的链表指针得到链表节点(即获取某个用户关键字key为yewei;而map字典中的key也存在yewei,即表示查找到),即得到用户下单信息,在懒删除的模式下此时先判断节点的expire字段即过期时间是否过期。如果已经过期,则需要将该节点从链表中删除,并从map字典中删除对应的键值对,以释放内存空间。如果没有过期,则将该节点移到链表头部,移动到链表头部是为了使最近被读取的用户下单信息放在头部,那么链表从头到尾就代表最新被访问的用户则越靠近头部。
38.步骤四、当累计内存使用量大于等于最大内存使用量max的50%时,启动一个线程每隔一段时间t毫秒检查一次链表中位数之后的随机n个节点,判断它们是否过期。如果过期,则需要将其从链表中删除,并从map中删除对应的键值对。
39.如:当累计内存使用量大于等于最大内存使用量max的50%时,表示系统的内存使用率已经达到一半以上,此时需要主动去检测过期的内存,并且及时删除以释放内存空间。系统将启动一个后台线程,每隔一段时间t毫秒检查链表中位数之后的随机n个节点是否过期,如果过期,则需要将其从链表中删除,并从map字典中删除对应的键值对,以释放内存空间。
40.步骤五、当累计内存使用量已经达到最大内存使用量max时,添加新的节点已经没有更多的内存空间使用,此时需要立即淘汰链表末尾的节点,直到释放出足够的新节点内存容量。添加的新节点插入链表头部,即把新节点的nextnode指向原有的链表头部。
41.如:当累计内存使用量已经达到最大内存使用量max时,如果有用户下单,则需要把用户的下单时间等信息存储至内存中,但此已经没有更多的内存空间使用,此时系统需要立即淘汰链表末尾的节点,直到释放出足够的新节点内存容量。系统会先将该节点从链表尾部删除,然后再插入新的节点到链表头部,即把新节点的nextnode指向原有的链表头部。
42.请参阅图2所示,本发明提供了一种内存数据自适应淘汰的系统,所述系统包括:内存设置模块、查找比对模块、懒删除模块、线程删除处理模块、以及释放空间模块;
43.所述内存设置模块,在内存中设置一个链表和map字典,链表的每个节点包含三个字段:value值、过期时间expire、指向下一个节点的指针nextnode;所述map字典建立了用户信息的索引;
44.所述查找比对模块,设置一个最大内存使用量max,并记录当前内存使用量,获取某个用户关键字key的值,从map字典中查找是否存在这个key;如果不存在,则返回失败;存在,则执行所述懒删除模块;
45.所述懒删除模块,当累计内存使用量小于最大内存使用量max的50%时采用懒删除,所述懒删除即:获取的key存在,则得到该key对应的节点在链表中的指针,通过指针得到节点数据,判断节点数据的过期时间expire是否已经过期;如果已经过期,则需要将该节点从链表中删除,并从map字典中删除对应的键值对;如果没有过期,则将该节点移到链表头部;
46.所述线程删除处理模块,当累计内存使用量大于等于最大内存使用量max的50%时,启动一个线程每隔一段时间t毫秒检查一次链表中位数之后的随机n个节点,判断n个节点的过期时间expire是否过期,如果过期,则需要将n个节点从链表中删除,并从map字典中删除对应的键值对;
47.所述释放空间模块,当累计内存使用量已经达到最大内存使用量max时,添加新的节点,表明已经没有更多的内存空间使用,淘汰链表末尾的节点,直到释放出足够的新节点内存容量。
48.所述内存设置模块中value值用于存储用户下单信息;所述过期时间expire表示此缓存何时失效;指向下一个节点的指针nextnode是用于链接下一个缓存节点,形成链表;所述map字典中包含有key和指针类型value,其中key为string类型,指针类型value为链表指针类型,指向链表节点;map字典建立了用户信息的索引,即将用户名作为键值key,将对应的链表节点作为指针类型value值存储到map字典中;当需要获取任意一个用户的信息时,只需要通过输入的用户关键字key在map字典中查找到对应的链表节点,即可得到用户下单信息。
49.所述释放空间模块的实现方式进一步包括:淘汰链表末尾的节点,即先将节点从链表尾部删除,然后添加的新节点插入链表头部,即把新节点的nextnode指向原有的链表头部。
50.以上所述仅为本发明的较佳实施例,凡依本发明申请专利范围所做的均等变化与修饰,皆应属本发明的涵盖范围。
技术特征:
1.一种内存数据自适应淘汰的方法,其特征在于:所述方法包括如下步骤:步骤s1、在内存中设置一个链表和map字典,链表的每个节点包含三个字段:value值、过期时间expire、指向下一个节点的指针nextnode;所述map字典建立了用户信息的索引;步骤s2、设置一个最大内存使用量max,并记录当前内存使用量,获取某个用户关键字key的值,从map字典中查找是否存在这个key;如果不存在,则返回失败;存在,则进入步骤s3;步骤s3、当累计内存使用量小于最大内存使用量max的50%时采用懒删除,所述懒删除即:获取的key存在,则得到该key对应的节点在链表中的指针,通过指针得到节点数据,判断节点数据的过期时间expire是否已经过期;如果已经过期,则需要将该节点从链表中删除,并从map字典中删除对应的键值对;如果没有过期,则将该节点移到链表头部;步骤s4、当累计内存使用量大于等于最大内存使用量max的50%时,启动一个线程每隔一段时间t毫秒检查一次链表中位数之后的随机n个节点,判断n个节点的过期时间expire是否过期,如果过期,则需要将n个节点从链表中删除,并从map字典中删除对应的键值对;步骤s5、当累计内存使用量已经达到最大内存使用量max时,添加新的节点,表明已经没有更多的内存空间使用,淘汰链表末尾的节点,直到释放出足够的新节点内存容量。2.根据权利要求1所述的一种内存数据自适应淘汰的方法,其特征在于:所述步骤s1中value值用于存储用户下单信息;所述过期时间expire表示此缓存何时失效;指向下一个节点的指针nextnode是用于链接下一个缓存节点,形成链表;所述map字典中包含有key和指针类型value,其中key为string类型,指针类型value为链表指针类型,指向链表节点;map字典建立了用户信息的索引,即将用户名作为键值key,将对应的链表节点作为指针类型value值存储到map字典中;当需要获取任意一个用户的信息时,只需要通过输入的用户关键字key在map字典中查找到对应的链表节点,即可得到用户下单信息。3.根据权利要求1所述的一种内存数据自适应淘汰的方法,其特征在于:所述步骤s5进一步包括:淘汰链表末尾的节点,即先将节点从链表尾部删除,然后添加的新节点插入链表头部,即把新节点的nextnode指向原有的链表头部。4.一种内存数据自适应淘汰的系统,其特征在于:所述系统包括:内存设置模块、查找比对模块、懒删除模块、线程删除处理模块、以及释放空间模块;所述内存设置模块,在内存中设置一个链表和map字典,链表的每个节点包含三个字段:value值、过期时间expire、指向下一个节点的指针nextnode;所述map字典建立了用户信息的索引;所述查找比对模块,设置一个最大内存使用量max,并记录当前内存使用量,获取某个用户关键字key的值,从map字典中查找是否存在这个key;如果不存在,则返回失败;存在,则执行所述懒删除模块;所述懒删除模块,当累计内存使用量小于最大内存使用量max的50%时采用懒删除,所述懒删除即:获取的key存在,则得到该key对应的节点在链表中的指针,通过指针得到节点数据,判断节点数据的过期时间expire是否已经过期;如果已经过期,则需要将该节点从链表中删除,并从map字典中删除对应的键值对;如果没有过期,则将该节点移到链表头部;所述线程删除处理模块,当累计内存使用量大于等于最大内存使用量max的50%时,启动一个线程每隔一段时间t毫秒检查一次链表中位数之后的随机n个节点,判断n个节点的
过期时间expire是否过期,如果过期,则需要将n个节点从链表中删除,并从map字典中删除对应的键值对;所述释放空间模块,当累计内存使用量已经达到最大内存使用量max时,添加新的节点,表明已经没有更多的内存空间使用,淘汰链表末尾的节点,直到释放出足够的新节点内存容量。5.根据权利要求4所述的一种内存数据自适应淘汰的系统,其特征在于:所述内存设置模块中value值用于存储用户下单信息;所述过期时间expire表示此缓存何时失效;指向下一个节点的指针nextnode是用于链接下一个缓存节点,形成链表;所述map字典中包含有key和指针类型value,其中key为string类型,指针类型value为链表指针类型,指向链表节点;map字典建立了用户信息的索引,即将用户名作为键值key,将对应的链表节点作为指针类型value值存储到map字典中;当需要获取任意一个用户的信息时,只需要通过输入的用户关键字key在map字典中查找到对应的链表节点,即可得到用户下单信息。6.根据权利要求4所述的一种内存数据自适应淘汰的系统,其特征在于:所述释放空间模块的实现方式进一步包括:淘汰链表末尾的节点,即先将节点从链表尾部删除,然后添加的新节点插入链表头部,即把新节点的nextnode指向原有的链表头部。
技术总结
本发明提供了一种内存数据自适应淘汰的方法,该方法为:步骤S1、在内存中设置一个链表和map字典;步骤S2、设置一个最大内存使用量max,并记录当前内存使用量,获取某个用户关键字key的值,从map字典中查找是否存在这个key;存在,则进入步骤S3;步骤S3、当累计内存使用量小于最大内存使用量max的50%时采用懒删除;步骤S4、当累计内存使用量大于等于最大内存使用量max的50%时,启动一个线程每隔一段时间t毫秒检查一次链表中位数之后的随机n个节点,并进行处理;步骤S5、当累计内存使用量已经达到最大内存使用量max时,添加新的节点,淘汰链表末尾的节点,直到释放出足够的新节点内存容量;本发明提供了能够自适应地淘汰过期数据的内存缓存机制。内存缓存机制。内存缓存机制。
技术研发人员:刘德建 叶伟 李佳
受保护的技术使用者:福建天晴数码有限公司
技术研发日:2023.05.09
技术公布日:2023/9/14
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
