redis内存
内存统计:
info memory命令:
used_memory: redis分配器分配的内存总量(字节) , 包括使用的虚拟内存
used_memory_rss : redis进程占操作系统的内存(字节) , 包括本身所需要的内存,内存碎片等,不包括使用的虚拟内存
men_fragmentation_ratio : 内存碎片比率 ,是used_memory_rss / used_memory的比值 . 当这个值< 1 说明使用了虚拟内存(swap), 由于虚拟内存的媒介是磁盘,所以这时候应该及时排查,如增加jedis节点,增加redis服务器的内存,优化应用等。
redis编译时会指定内存分配器, 默认使用jemalloc
redis数据存储
// key-value; struct dicEntry { void *key; // SDS void *value; // redisObject struct *dicEntry next; } // value struct redisObject { unsigned type; // 五种数据类型 unsigned encoding; //编码 unsigned lru; // 最后一次程序被访问的时间 unsigned refcount //引用计数 void *ptr; //SDS 指向底层数据结构指针 } //sds struct sds { int len; int free; char buf[]; }
redis对象类型与内部编码:
1. string
int / embstr / raw
2. list
ziplist / linkedlist
3. hash
ziplist / hashtable
4. set
intset / hashtable
5. zset
ziplist / skipedlist