【134期】面试官:你知道 Redis 内部是怎么实现它的字符串的么?
程序员的成长之路
共 2546字,需浏览 6分钟
·
2021-02-06 00:09
阅读本文大概需要 4 分钟。
作者:小小木
cnblogs.com/wyc1994666/p/10669212.html
Redis字符串的实现 Redis字符串的性能优势
Redis字符串的实现
1.SDS 代码结构
struct sdshdr{
// 记录已使用长度
int len;
// 记录空闲未使用的长度
int free;
// 字符数组
char[] buf;
};
2.SDS 动态扩展特点
计算出大小是否足够 开辟空间至满足所需大小 开辟与已使用大小len相同长度的空闲free空间(如果len < 1M)开辟1M长度的空闲free空间(如果len >= 1M)
Redis字符串的性能优势
快速获取字符串长度 避免缓冲区溢出 降低空间分配次数提升内存使用效率
1.快速获取字符串长度
struct sdshdr{
// 记录已使用长度
int len;
// 记录空闲未使用的长度
int free;
// 字符数组
char[] buf;
};
2.避免缓冲区溢出
计算出大小是否足够 开辟空间至满足所需大小 降低空间分配次数提升内存使用效率
空间与分配 惰性空间回收
1. 空间预分配
当修改后的字符串长度len < 1M,则会分配与len相同长度的未使用的空间(free) 当修改后的字符串长度len >= 1M,则会分配1M长度的未使用的空间(free)
2. 惰性空间回收
推荐阅读:
【133期】面试官:你说熟悉MySQL事务,那来谈谈事务的实现原理吧!
【132期】面试再被问到Spring容器IOC初始化过程,就拿这篇文章砸他~
【130期】面试官:你能说清楚分布式锁,进程锁,线程锁的区别吗?
微信扫描二维码,关注我的公众号
朕已阅
评论