根据redis官方文档(点击打开链接),我们知道,redis在移除键值对的时候,并不会将内存返回给操作系统,这不是redis的问题,是因为redis使用了内存分配函数malloc(),之前就有了解过,malloc()在申请内存时,会优先遍历内部维护的一个空闲内存链表(有关这个可以看这个博客点击打开链接),如果找到大小匹配的内存,将内存空闲链表的空闲内存返回,否则进入系统调用,向操作系统申请内存。free()释放内存时,会将内存优先加入空闲内存链表。这就会导致随着系统的运行,可能redis会逐渐吃掉系统的全部内存,尽管实际用到的内存很少,并且下次分配不会提高进程占用的内存。但是由此产生的内存饥饿可能影响其他进程的运行,为了解决这个办法可以设置redis的配置字段maxmemory-policy为
noeviction