zoukankan      html  css  js  c++  java
  • Redis实战 内存淘汰机制

    http://blog.720ui.com/2016/redis_action_02_maxmemory_policy/#volatile-lru

    文章目录

    1. 1. 如何配置
    2. 2. 动态改配置命令
      1. 2.1. 设置最大内存
      2. 2.2. 设置淘汰策略
    3. 3. 内存淘汰策略
      1. 3.1. volatile-lru
      2. 3.2. volatile-ttl
      3. 3.3. volatile-random
      4. 3.4. allkeys-lru
      5. 3.5. allkeys-random
      6. 3.6. no-enviction
    4. 4. 如何选择淘汰策略

    redis 内存数据集大小上升到一定大小的时候,就会进行数据淘汰策略。

    如何配置

    我们通过配置redis.conf中的maxmemory这个值来开启内存淘汰功能。

    # maxmemory

    值得注意的是,maxmemory为0的时候表示我们对Redis的内存使用没有限制。

    根据应用场景,选择淘汰策略

    # maxmemory-policy noeviction

    我们来了解下,内存淘汰的过程

    首先,客户端发起了需要申请更多内存的命令(如set)。

    然后,Redis检查内存使用情况,如果已使用的内存大于maxmemory则开始根据用户配置的不同淘汰策略来淘汰内存(key),从而换取一定的内存。

    最后,如果上面都没问题,则这个命令执行成功。

    动态改配置命令

    此外,redis支持动态改配置,无需重启。

    设置最大内存

    config set maxmemory 100000

    设置淘汰策略

    config set maxmemory-policy noeviction

    内存淘汰策略

    volatile-lru

    从已设置过期时间的数据集中挑选最近最少使用的数据淘汰。redis并不是保证取得所有数据集中最近最少使用的键值对,而只是随机挑选的几个键值对中的, 当内存达到限制的时候无法写入非过期时间的数据集。

    volatile-ttl

    从已设置过期时间的数据集中挑选将要过期的数据淘汰。redis 并不是保证取得所有数据集中最近将要过期的键值对,而只是随机挑选的几个键值对中的, 当内存达到限制的时候无法写入非过期时间的数据集。

    volatile-random

    从已设置过期时间的数据集中任意选择数据淘汰。当内存达到限制的时候无法写入非过期时间的数据集。

    allkeys-lru

    从数据集中挑选最近最少使用的数据淘汰。当内存达到限制的时候,对所有数据集挑选最近最少使用的数据淘汰,可写入新的数据集。

    allkeys-random

    从数据集中任意选择数据淘汰,当内存达到限制的时候,对所有数据集挑选随机淘汰,可写入新的数据集。

    no-enviction

    当内存达到限制的时候,不淘汰任何数据,不可写入任何数据集,所有引起申请内存的命令会报错。

    如何选择淘汰策略

    下面看看几种策略的适用场景

    allkeys-lru:如果我们的应用对缓存的访问符合幂律分布,也就是存在相对热点数据,或者我们不太清楚我们应用的缓存访问分布状况,我们可以选择allkeys-lru策略。

    allkeys-random:如果我们的应用对于缓存key的访问概率相等,则可以使用这个策略。

    volatile-ttl:这种策略使得我们可以向Redis提示哪些key更适合被eviction。

    另外,volatile-lru策略和volatile-random策略适合我们将一个Redis实例既应用于缓存和又应用于持久化存储的时候,然而我们也可以通过使用两个Redis实例来达到相同的效果,值得一提的是将key设置过期时间实际上会消耗更多的内存,因此我们建议使用allkeys-lru策略从而更有效率的使用内存。

  • 相关阅读:
    ubuntu高版本环境变量问题
    linux下可以和qq截屏比拟的工具hotshots
    如何以非 root 用户将应用绑定到 80 端口-ssh 篇
    mvn profile 深层次目录打参数核心配置
    java 判断字符串编码
    springmvc 传递和接收数组参数
    系统分层 manager层意义
    mysql insert中文乱码无法插入ERROR 1366 (HY000): Incorrect string value
    Apache Lens —— 统计数据分析查询接口
    云平台需要开发的底层功能
  • 原文地址:https://www.cnblogs.com/alsf/p/9399011.html
Copyright © 2011-2022 走看看