简介
Redis是一种基于内存的数据库,通过将数据存储在内存中而不是磁盘上,显著提高了读写效率。因此,监控Redis的内存使用情况并理解其内存模型,对于高效且长期稳定地使用Redis至关重要。
Redis提供以下命令来查询当前Redis内存的使用情况:
info memory
执行该命令后,输出结果如下:
具体指标如下所示:
属性 | 说明 |
---|---|
used_memory | Redis分配器分配的总内存量,即内部存储的所有数据的内存占用量 |
used_memory_human | 以可读的格式返回used_memory |
used_memory_rss | 从操作系统角度显示Redis进程占用的物理内存总量 |
used_memory_rss_human | used_memory_rss的用户友好格式显示 |
used_memory_peak | 内存使用的最大值,表示used_memory的峰值 |
used_memory_peak_human | 以可读的格式返回used_memory_peak的值 |
used_memory_lua | Lua引擎所消耗的内存大小 |
mem_fragmentation_ratio | used_memory_rss / used_memory的比值,表示内存碎片率 |
maxmemory | Redis能够使用的最大内存上限,0表示没有限制,以字节为单位 |
maxmemory_policy | Redis使用的内存回收策略,包括noeviction、allkeys-lru、volatile-lru、allkeys-random、volatile-random或volatile-ttl,默认是noeviction,即不会回收 |
通常,mem_fragmentation_ratio大于1,且该值越大,内存碎片比例越大。对于jemalloc来说,mem_fragmentation_ratio在1.03左右是比较健康的状态。
Redis内存划分
作为内存数据库,Redis在内存中主要存储数据(键值对)。除了数据本身,Redis的其他部分也会占用内存。Redis的内存占用主要可以划分为以下几个部分:
输入缓冲无法控制,最大空间为1G,如果超过将断开连接。输入缓冲区不受maxmemory控制,假设一个Redis实例设置了maxmemory为4G,已经存储了2G数据,但此时输入缓冲区使用了3G,就已经超出了maxmemory限制,可能导致数据丢失、键值淘汰或者OOM。
内存回收策略
Redis的内存回收机制主要体现在两个方面:
策略 | 备注 |
---|---|
noeviction | 默认策略,不会删除任何数据,拒绝所有写入操作并返回客户端错误信息(error)OOM command not allowed when used memory |
volatile-lru | 只对设置有超时属性的Key根据LRU算法执行删除操作,如果没有可删除的Key,则回退到noeviction策略 |
allkeys-lru | 针对所有key,根据LRU算法执行删除操作直到回收到足够内存空间 |
allkeys-random | 随机删除所有键,直到腾出足够空间 |
volatile-random | 针对带有过期属性的键,进行删除操作,直到腾出足够空间 |
volatile-ttl | 根据键值对象的ttl属性,删除最近将要过期的数据。如果没有,则回退到noeviction策略 |
参考:
以上就是理解Redis的内存的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号