本发明涉及内存回收,具体地说是定量释放redis空间的方法及系统。
背景技术:
1、redis设置有回收策略,当存入缓存出现超过最大缓存空间时,redis要么报错,要么回收空间,腾出足够空间后再进行存储,redis回收策略主要有三类,分别为惰性删除、定时删除和定期删除,惰性删除是指当key过期时不立即删除key,而是等下一次访问时再删除key。
2、定期删除策略,在内存不足以容纳新写入的数据时会触发内存回收,此时无论使用那种回收策略,都有很大可能出现一种尴尬问题,那就是当回收了一部分内存后内存空间可以写入新来的数据了,等下次写入,没过多长时间,再次出发了内存空间不足以容纳数据的情况,反复在边界附近横跳抖动,造成资源浪费和性能降低,并且当定期清理后,按照设置的周期和采样率还需要再次抽样检查是否已经满足少于百分之二十五的失效key条件,即使满足条件也不一定能保证空间够用。
3、针对redis只是回收到可以容纳新数据的情况、当没有达到强制回收到的标准时继续回收直到达到回收标准,是需要解决的技术问题。
技术实现思路
1、本发明的技术任务是针对以上不足,提供定量释放redis空间的方法及系统,来解决针对redis只是回收到可以容纳新数据的情况、当没有达到强制回收到的标准时继续回收直到达到回收标准的技术问题。
2、第一方面,本发明一种定量释放redis空间的方法,包括如下步骤:
3、s100、在配置文件中添加两个配置项,分别为用于预处理回收的参数preforcedrecycling以及用于指定强制回收的参数forcedrecycling,并设定preforcedrecycling的比例用于指定常规回收;
4、s200、检查内存占用是否大于preforcedrecycling,如果是,执行步骤s300,如果否,定期检查内存占用是否大于preforcedrecycling的比例;
5、s300、按照定期回收策略回收内容,并执行步骤s400;
6、s400、检查内存占用是否大于forcedrecycling,如果是,执行步骤s500,否则否,定期检查内存占用是否大于forcedrecycling;
7、s500、强制回收内容直至内存占用小于等于preforcedrecycling。
8、作为优选,在配置文件中添加两个配置项,当redis启动时把配置项读入到内存中。
9、作为优选,按照定期回收策略回收key值,定期回收策略共八种,分别为:
10、volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,使用lru算法,移除最近最少使用的key;
11、allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,使用lru算法,移除最近最少使用的key;
12、volatile-lfu:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,使用lfu算法,移除最近最少使用的key;
13、allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中,使用lfu算法,移除最近最少使用的key;
14、volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key;
15、allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key;
16、volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除;
17、noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
18、作为优选,forcedrecycling接近最大内存空间、但是至少留出一个最大value的空间。
19、第二方面,本发明一种定量释放redis空间的系统,用于通过如第一方面任一项所述的一种定量释放redis空间的方法释放redis空间,所述系统包括配置模块和执行模块,
20、所述配置模块用于在配置文件中添加两个配置项,分别为用于预处理回收的参数preforcedrecycling以及用于指定强制回收的参数forcedrecycling,并设定preforcedrecycling的比例用于指定常规回收;
21、所述执行模块用于执行如下:
22、l100、检查内存占用是否大于preforcedrecycling,如果是,执行步骤l200,如果否,定期检查内存占用是否大于preforcedrecycling的比例;
23、l200、按照定期回收策略回收内容,并执行步骤l300;
24、l300、检查内存占用是否大于forcedrecycling,如果是,执行步骤l400,否则否,定期检查内存占用是否大于forcedrecycling;
25、l400、强制回收内容直至内存占用小于等于preforcedrecycling。
26、作为优选,配置模块用于在配置文件中添加两个配置项,当redis启动时把配置项读入到内存中。
27、作为优选,按照定期回收策略回收key值,定期回收策略共八种,分别为:
28、volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,使用lru算法,移除最近最少使用的key;
29、allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,使用lru算法,移除最近最少使用的key;
30、volatile-lfu:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,使用lfu算法,移除最近最少使用的key;
31、allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中,使用lfu算法,移除最近最少使用的key;
32、volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key;
33、allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key;
34、volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除;
35、noeviction:当内存不足以容纳新写入数据时,新写入操作会报错。
36、作为优选,forcedrecycling接近最大内存空间、但是至少留出一个最大value的空间。
37、本发明的定量释放redis空间的方法及系统具有以下优点:可以一次回收较多内存,降低在边界附近来回跳跃抖动,每次检查不去从数据库中频繁采样,检查过期key所占的比例,而是直接检查剩余空间,如果剩余空间充足,就不去导致频繁触发回收存储空间以至于多次检查多次回收的情况,如果内存空间即将不够充足,即达到preforcedrecycling没有达到forcedrecycling,则触发redis自身带的定期回收策略,如果超过了forcedrecycling时则触发强制回收策略,回收内存直到低于preforcedrecycling,这样降低采样频率,提高访问性能。