配置文件中设置redis内存的参数:
该参数如果不设置或者设置为0,则redis默认的内存大小为:
32位下默认是3G
64位下不受限制
一般推荐Redis设置内存为最大物理内存的四分之三,也就是0.75
命令行设置config set maxmemory <内存大小,单位字节>,服务器重启失效
config get maxmemory获取当前内存大小
永久则需要设置maxmemory参数,maxmemory是bytes字节类型,注意转换
Redis 服务器的内存大小 不是固定的 ,它取决于你 部署 Redis 的服务器(物理机、虚拟机或容器)所分配的内存资源 ,以及 你对 Redis 的配置限制。
简单来说:
一、Redis 本身不预设固定内存大小
Redis 是一个内存数据库,它把所有的数据都保存在 内存(RAM) 中以提供极高的读写性能。但它 不会自动占用所有可用内存,其使用的内存大小主要由以下因素决定:
-
你部署 Redis 的服务器总内存有多大
- 比如你在一台 8GB 内存的云服务器 上运行 Redis,那么 Redis 最多只能用这 8GB 中的一部分(还要给操作系统和其他进程留空间)。
- 如果你在一台 128GB 内存的服务器 上运行 Redis,那 Redis 可用的理论上限就高很多。
-
Redis 配置参数:maxmemory
-
Redis 提供了一个配置项叫做
maxmemory,用于 限制 Redis 最多可以使用多少内存。 -
如果你在
redis.conf文件中设置了:confmaxmemory 2gb那么 Redis 就会 最多使用 2GB 的内存,超过后根据你的策略(比如 LRU)开始删除数据。
-
如果 没有设置 maxmemory ,Redis 默认没有内存上限(即可以使用掉服务器所有可用内存),这在生产环境中是非常危险的,可能导致系统 OOM(Out Of Memory)被杀死。
-
-
实际使用内存大小
-
你可以通过 Redis 命令查看当前 Redis 实例用了多少内存:
bashINFO memory其中关键字段是:
used_memory: Redis 当前使用的实际内存(单位字节)used_memory_human: 可读格式,比如 "50MB"、"2GB"maxmemory: 当前配置的最大内存限制(如果没有设置会显示 0)
示例输出可能如下:
used_memory:52428800 used_memory_human:50.00M maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction- 这里
maxmemory:0表示未设置上限,Redis 可以一直用内存直到系统不允许。
-
二、如何查看你的 Redis 用了多少内存?
如果你已经有一个正在运行的 Redis 服务,可以通过以下方式查看它的内存使用情况:
方法一:使用 redis-cli 执行 INFO 命令
bash
redis-cli INFO memory
关注以下几个字段:
used_memory: 已使用内存(字节)used_memory_human: 可读形式(如 MB、GB)maxmemory: 最大允许使用内存(如果为 0 表示无限制)maxmemory_policy: 达到内存上限后的淘汰策略
方法二:使用 redis-cli 执行 MEMORY STATS(更详细)
bash
redis-cli MEMORY STATS
会返回一系列内存使用相关的统计信息。
三、常见生产环境中的 Redis 内存配置建议
- 一定要设置
maxmemory! 不设置的话 Redis 可能会吃光服务器内存,引发系统崩溃。 - 根据业务需求和服务器情况,合理设置
maxmemory,比如:- 如果服务器有 16GB,通常建议给 Redis 分配 4GB ~ 12GB (视其他服务而定),并通过
maxmemory限制。
- 如果服务器有 16GB,通常建议给 Redis 分配 4GB ~ 12GB (视其他服务而定),并通过
- 设置合理的 淘汰策略(maxmemory-policy) ,比如:
volatile-lru:对设置了过期时间的 key 使用 LRU 淘汰allkeys-lru:对所有 key 使用 LRU 淘汰(当内存满了时)noeviction(默认):不淘汰数据,但写入新数据时报错(内存不足时)
四、总结回答
Redis 服务器的内存大小不是固定的,它依赖于你运行 Redis 的服务器本身有多少内存,以及你是否通过
maxmemory参数限制了 Redis 能使用的内存。如果没有设置限制,Redis 可能会使用掉服务器的全部可用内存,这是不安全的。通常我们会为 Redis 设置一个合理的maxmemory值(比如几 GB 到几十 GB,视业务而定),并通过INFO memory命令来查看实际使用情况。