zoukankan      html  css  js  c++  java
  • Redis缓存淘汰策略

    Redis缓存淘汰策略

    当 redis 内存超出物理内存限制时,内存的数据会开始和磁盘产品频繁的交换(swap)。这种机制因为涉及到 IO 操作,所以会让 redis 的性能急剧下降。redis 访问量本来就十分频繁,存取效率大幅度降低是很致命的。

    在生产环境中我们是不允许 redis 出现 swap 行为的。所以一般会限制最大的使用内存,redis 提供了配置参数maxmemory 来规定最大的使用内存。

    以下配置均为合法:

    maxmemory 1000KB
    maxmemory 100MB
    maxmemory 1GB
    maxmemory 0  # 表示不做限制,一般不会用
    

    当实际内存超出了 maxmemory 时,redis(5.0.8) 提供了八种淘汰策略(maxmemory-policy)供我们选择。


    • noeviction

    写请求会报错 (DEL 请求可以继续服务),读请求可以继续进行。这样可以保证不会丢失数据,但是会让线上的业务不能持续进行。这是默认的淘汰策略。


    • volatile-lru

    淘汰范围:设置了过期时间的 key。(没有设置过期时间的 key 不会被淘汰,这样可以保证需要持久化的数据库不会突然丢失)

    淘汰策略:优先删除最近最少使用的 key。(LRU算法实现:Least recently used,最近最少使用。)


    • volatile-lfu

    淘汰范围:设置了过期时间的 key。

    淘汰策略:优先删除使用频率最少的 key。(LFU算法实现:Least frequently used,最不经常使用。)


    • volatile-ttl

    淘汰范围:设置了过期时间的 key。

    淘汰策略:优先删除剩余时间(ttl,time to live)短的 key。


    • volatile-random

    淘汰范围:设置了过期时间的 key。

    淘汰策略:随机删除淘汰范围内的 key。


    • allkeys-lru

    淘汰范围:全体 key。

    淘汰策略:优先删除最近最少使用的 key。(LRU算法实现:Least recently used,最近最少使用。)


    • allkeys-lfu

    淘汰范围:全体 key。

    淘汰策略:优先删除使用频率最少的 key。(LFU算法实现:Least frequently used,最不经常使用。)


    • allkeys-random

    淘汰范围:全体 key。

    淘汰策略:随机删除淘汰范围内的 key。


    • 关于用哪个?

    LRU算法淘汰的是最近最少使用的;
    LFU算法淘汰的是一直以来使用频率最少的。

    还是得结合业务场景去考虑。
    一般还是volatile-lru会偏多一点吧。

    具体配置:

    maxmemory-policy volatile-lru
    
  • 相关阅读:
    AX2009直接交运的bug
    数据库日志
    新蛋中国最新的分类导航,右侧展开菜单,可以修改向左或者向右展开
    用图片代替滚动条的代码
    新蛋网的大图展示效果,缩略图点击显示大图,上一个下一个
    Banner 切换,大小图不同,支持FF和OPERA,IE系列
    下拉菜单,支持所有浏览器
    电容选型
    000.数字电子技术分类
    Altium design16设计技巧
  • 原文地址:https://www.cnblogs.com/chichung/p/12702756.html
Copyright © 2011-2022 走看看