内存统计:

info memory命令:

redis 内存碎片比率 redis内存分配器_虚拟内存

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