💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
内存回收机制主要体现在两个方面 1. 删除过期键和键对象 2. 内存占用达到maxmemory时(内存溢出)触发的内存回收策略 ### **删除过期键的对象** 1. 惰性删除 - 根据key获取value的时候,首先判断key是否过期,过期的情况下删除该key和对应的value,并返回nil。 * 节省了CPU消耗 * 存在内存泄漏,过期键一直没被访问导致内存无法释放 2. 定时任务删除 - Redis维护定时任务 ### **内存溢出控制策略 - 共6种** 1. noeviction:默认策略,写入返回错误,不会删除数据。 2. volatile-lru:删除范围是全局+过期,根据LRU算法删除超时的键对象,直倒腾出足够空间。找不到过期的键对象时,切换到默认策略 3. allkeys-lru:删除范围是全局,根据LRU算法,直倒腾出足够空间 4. allkeys-random:删除范围是全局,随机删除 5. volatile-random:删除范围是全局+过期,删除策略是随机 6. volatile-ttl:删除范围是过期,删除策略是所有最近数据,如果不存在,回退到默认策略 #### 备注 不同内存控制策略表现在数据范围和删除策略方面 * 范围: 1. 全局数据 2. 仅局限在超时数据 * 策略 1. 随机 2. LRU算法(在数据集合中,剔除热度最低的数据) | 策略 | 对应数据范围 | 内容 | | --- | --- | --- | | noeviction | 全局 | 默认策略,写入数据时返回错误 | | volatile-lru | 过期的键对象集合 | 根据LRU算法删除过期的键对象,直倒腾出足够空间,没有可删除对象时切换到默认策略 | | volatile-random | 过期的键对象集合 | 随机删除 | | allkeys-lru | 全局 | 根据LRU算法删除 | | allkeys-random | 全局 | 随机删除 | | volatile-ttl | 过期的键对象集合 | 根据ttl属性,删除最近的数据 | ***** ## **LRU算法实现原理** ![](https://box.kancloud.cn/bcf7b7074bb035715f27c8b3305ddeef_759x577.png)