redis内存管理方式,支持tcmalloc,jemalloc,malloc三种内存分配,memcache使用slabs,malloc等内存分配方式。
简单点,就是redis,是边用边申请,使用现场申请内存的方式来存储数据,而且不多使用free-list等方式来优化内存分配; memcache使用预分配的内存池的方式,使用slab和大小不一样的chunk来管理内存,Item根据大小选择合适的chunk存储,内存池的方式能够省去申请/释放内存的开销
优化的参数: 1.设置下redis.conf中的maxmemory选项,个人经验是当你的redis物理内存使用超过内存总容量的3/5时就会开始比较危险了。redis
2.须要将vm.overcommit设置为1,这参数在大量写入时,颇有用
overcommit_memory=0,默认,智能超发,每次要求分配内存时,kernel都会比较请求的空间和空余的空间是否足以分配 overcommit_memory=1,请求分配内存时,永远伪装还有足够的内存 overcommit_memory=2,不容许超发内存,即容许分配的大小小于
3.确保设置了必定量的swap,最好和内存同样大,不然内核的OOM(out-of-memory)killer会干掉Redis进程优化