Redis :command not allowed when used memory

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 配置项。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值