Redis :command not allowed when used memory

发布于:2025-03-27 ⋅ 阅读:(93) ⋅ 点赞:(0)

目录标题

  • Redis 相关问题分析与配置确认
    • 一、错误日志分析
    • 二、maxmemory-policy 的配置选项
    • 三、缓存穿透与 Redis 内存占用
    • 四、确认 maxmemory 和 maxmemory-policy 的配置
      • 确认 maxmemory 配置
      • 确认 maxmemory-policy 配置

Redis 相关问题分析与配置确认

一、错误日志分析

  • 日志来源:用户提供了 Redis 相关的错误日志,显示在执行命令时遇到“command not allowed when used memory”的错误。
  • 错误原因:由于 Redis 内存限制(maxmemory)达到,导致命令被拒绝执行。
  • 涉及组件
    • Redisson 客户端执行 EVAL 命令时出现问题。
    • 日志包含客户端和服务器的 IP、端口信息,以及分布式锁相关的键和编码器信息。

二、maxmemory-policy 的配置选项

  • noeviction:内存达到上限时,拒绝所有写入请求(DEL 命令除外),读取请求可以继续。
  • volatile-lru:从设置了过期时间的键中,根据 LRU 算法选择并淘汰最久未使用的键。
  • volatile-lfu:从设置了过期时间的键中,根据 LFU 算法选择并淘汰使用频率最低的键。
  • volatile-ttl:从设置了过期时间的键中,选择剩余生存时间(TTL)最短的键进行淘汰。
  • volatile-random:从设置了过期时间的键中,随机选择键进行淘汰。
  • allkeys-lru:从所有键中,根据 LRU 算法选择并淘汰最久未使用的键。
  • allkeys-lfu:从所有键中,根据 LFU 算法选择并淘汰使用频率最低的键。
  • allkeys-random:从所有键中,随机选择键进行淘汰。

三、缓存穿透与 Redis 内存占用

  • 缓存穿透定义:查询的 Key 在 Redis 中不存在,同时在数据库中也不存在,导致每次请求都直接查询数据库。
  • 对 Redis 内存的影响:缓存穿透本身不会直接导致 Redis 内存高,但在解决缓存穿透问题时(如缓存空对象或使用布隆过滤器),可能会间接增加 Redis 的内存占用。

四、确认 maxmemory 和 maxmemory-policy 的配置

确认 maxmemory 配置

  • 通过 redis-cli 命令行工具
    • 执行 config get maxmemory 查看当前设置。
    • 执行 config set maxmemory <value> 修改值,<value> 可为具体字节数或带单位的值(如 100mb1gb)。
  • 检查 Redis 配置文件:打开 redis.conf 文件,查找 maxmemory 配置项。

确认 maxmemory-policy 配置

  • 通过 redis-cli 命令行工具
    • 执行 config get maxmemory-policy 查看当前设置。
    • 执行 config set maxmemory-policy <policy> 修改策略,<policy> 为上述提到的策略取值之一。
  • 检查 Redis 配置文件:打开 redis.conf 文件,查找 maxmemory-policy 配置项。
    在这里插入图片描述

网站公告

今日签到

点亮在社区的每一天
去签到