以下是Redis中“隐藏”内存消耗的一些来源:
Marc已经提到了主机维护供从机使用的缓冲区。如果从属服务器落后于其主服务器(例如,因为它在较慢的机器上运行),则将在主服务器上消耗一些内存。
当检测到长时间运行的命令时,Redis将它们记录在SLOWLOG区域中,这会占用一些内存。您可能要使用SLOWLOG LEN命令来检查此处的记录数。
通信缓冲区也可以占用内存。据我所记得,在Redis的旧版本(2.4已经很旧了-您应该真正升级)中,它是不受限制的,这意味着如果您在某个点上传输一个大对象,则与此客户端连接相关联的通信缓冲区将会增加永不缩水。如果有许多客户偶尔处理大型物体,则可能是一种解释。如果您使用命令从Redis中检索非常大的数据(一次完成),这也可能是一种解释。例如,在Redis服务器上应用简单的KEYS *命令来存储数百万个密钥,将会消耗大量内存。
您提到您有多达25 MB的对象。您有404个客户端连接,如果每个客户端连接都需要在某个时间点访问此类对象,则会消耗10 GB的内存。



