内存统计:
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