目录标题
- 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>
可为具体字节数或带单位的值(如 100mb
、1gb
)。
- 检查 Redis 配置文件:打开
redis.conf
文件,查找 maxmemory
配置项。
确认 maxmemory-policy 配置
- 通过 redis-cli 命令行工具:
- 执行
config get maxmemory-policy
查看当前设置。 - 执行
config set maxmemory-policy <policy>
修改策略,<policy>
为上述提到的策略取值之一。
- 检查 Redis 配置文件:打开
redis.conf
文件,查找 maxmemory-policy
配置项。
