1、背景
redis 作为缓存零碎,内存可存储的数据必然比物理硬盘要少得多,所以咱们不能无止境的往内存中存储大量的数据,除此之外还须要定期对数据做清理工作。以保障内存零碎的失常运行。
2、算法介绍
2.1 LRU 算法
LRU 是 Least Recently Used 的缩写,顾名思义就是 最近起码应用,是比拟罕用的页面置换算法,抉择最久没有应用的页面给予淘汰。该算法赋予每个页面一个拜访字段,用来记录页面最新一次被拜访的工夫 t,当必须淘汰一个页面时,抉择现有页面工夫 t 间隔最久的,即最近起码应用的页面给予淘汰。是依据工夫维度来判断的。
2.2 LFU 算法
LFU(Least Frequently Used (LFU) page-replacement algorithm), 即 最不常应用页置换算法,要求在页置换时援用计数最小的页,因为常常应用的页应该有一个较大的援用次数。然而有些页在开始时应用的次数较多,但当前将不再应用了,然而因为领有较大的援用次数,所以每次淘汰的页面都不会有它,因而每次淘汰后都将计数值右移一位,如此一来通过几轮淘汰后,计数大且近期不必的页也可能被淘汰。是依据应用次数作为维度来判断的。
2.3 随机算法
随机去筛选淘汰页面。
2.4 TTL
将超时工夫最短的数据,提前删除。
3、redis 内存优化抉择
能够批改 redis.conf 文件中的 maxmemory-policy 的值来抉择采纳哪种算法进行优化
①volatile-lru:在设定超时工夫的数据中采纳 LRU 算法
②allkeys-lru:所有的数据采纳 LRU 算法删除
③volatile-lfu:设定了超时工夫的数据采纳 LFU 算法删除
④allkeys-lfu:所有数据采纳 LFU 算法删除
⑤volatile-random:设定了超时工夫的数据采纳随机算法
⑥allkeys-random:所有数据的随机算法
⑦volatile-ttl:设定了超时工夫之后采纳 TTL 算法
⑧noeviction:不做任何操作, 只是返回报错信息