导图社区 redis内存优化
redis内存优化思维导图,内容有redis项目值对象组成、缩减键值对象、共享对象池、字符串优化、控制键的数量、编码优化等。
这是一篇关于Codecademy - Javascript的思维导图,主要内容有Variables、Functions、lf statement、Switch statement、Loops等。
这是一篇关于js模块化的思维导图,主要内容有模块加载方案、前端模块化开发的价值、模块的循环引用。
typescript语法的思维导图,主要内容有基本数据类型、对象类型、任意类型Any、联合类型Union Types、元组Tuple等。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
redis内存优化
redisObject值对象组成
对象类型
内部编码
LRU计时时钟:记录对象最后一次被访问的时间,配合maxmemory-policy=volatile-lru或allkeys-lru时删除键数据
引用计数器:记录当前独享被引用的次数
数据指针:整数,直接记录;其他,指向数据的指针
缩减键值对象
简写键
压缩值
共享对象池
作用对象
0-9999
失效场景
设置maxmemory-policy + LRU策略
使用ziplist编码
为什么只有整数对象池?
整数判断时间时间复杂度为 O(1)
字符串优化
简单动态字符串SDS
已用字节长度:len
未用字节长度:free
字节数组:char []
预分配机制
优:减少字符串修改带来的内存重新分配和字节数据的拷贝
缺:内存浪费,内存碎片化
规则
首次创建不做预分配
修改后,free不足,数据 < 1M,预分配一倍
修改后,free不足,数据 > 1M,预分配1M
字符串重构
json转hash
控制键的数量
将大量键映射到hash中减少键的数量
编码优化
编码
string
int
embstr
字符串长度 <= 39字节,字符串sds和redisObject一块分配,只需一次内存分配
raw
list
ziplist
linkedlist
quicklist(3.2)
hash
hashtable
set
intset
zset
skiplist
编码转换
写入时自动转换完成
只能从小内存编码转成大内存编码
转换举例(hash)
判断数据是否大于 hash-max-ziplist-value
判断集合长度是否大于 hash-max-ziplist-entries
ziplist使用建议
元素个数小于1000
单个元素在512字节内
占用内存小但命令操作复杂度较高