Please enable JavaScript.
Coggle requires JavaScript to display documents.
redis内存优化 (redisObject值对象组成 (LRU计时时钟:记录对象最后一次被访问的时间,配合maxmemory…
redis内存优化
redisObject值对象组成
LRU计时时钟:记录对象最后一次被访问的时间,配合maxmemory-policy=volatile-lru或allkeys-lru时删除键数据
引用计数器:记录当前独享被引用的次数
内部编码
数据指针:整数,直接记录;其他,指向数据的指针
对象
字符串优化
简单动态字符串SDS
未用字节长度:free
字节数组:char[]
已用字节长度:len
预分配机制
缺:内存浪费,内存碎片化
规则
修改后,free不足,数据<1M,预分配一倍
修改后,free不足,数据>1M,预分配1M
首次创建不做预分配
优:减少字符串修改带来的内存重新分配和字节数据的拷贝
字符串重构
json转hash
共享对象池
作用对象
0-9999
失效场景
设置maxmemory-policy+LRU策略
使用ziplist编码
为什么只有整数对象池
整数判断时间复杂度O(1)
缩减健值对象
简写键
压缩值
编码优化
编码
hash
ziplist
hashtable
set
intset
hashtable
list
linkedlist
quicklist(3.2)
ziplist
zset
ziplist
skiplist
string
embstr 字符串长度<=39字节,字符串sds和redisObject一块分配,只需一次内存分配
raw
int
编码转换
只能从小内存编码转成大内存编码
转换举例(hash)
判断数据是否大于hash-max-ziplist-value
判断集合长度是否大于hash-max-ziplist-entries
写入时自动转换完成
ziplist使用建议
元素个数小于1000
单个元素在512字节内
占用内存小但命令操作复杂度较高
控制键的数量
将大量键映射到hash中减少键的数量