https://blog.csdn.net/weixin_44266509/article/details/89095788
Redis 的常用5种数据结构,Redis持久化策略,Redis实现分布式锁,简单发布订阅等等
面试官 :看你简历上写了熟悉常用数据结构,都有哪些说说
本人 :常用有5种,string,list,set,zset,hash(内心很得意)
面试官 :那你说说都用过哪些数据结构
本人 :用的最多的是string,通常会把json字符串存进去
面试官 :那你知道Redis内部是怎么实现它的string的么?
本人 :呃~,我了解Redis是用C语言写的,至于具体实现就不清楚了~
本篇会讲一下内容:
Redis字符串的实现
Redis虽然是用C语言写的,但却没有直接用C语言的字符串,而是自己实现了一套字符串。目的就是为了提升速度,提升性能,可以看出Redis为了高性能也是煞费苦心。
Redis构建了一个叫做简单动态字符串(Simple Dynamic String),简称SDS。
struct sdshdr{
// 记录已使用长度
int len;
// 记录空闲未使用的长度
int free;
// 字符数组
char[] buf;
};
追加’ world’ 6个字符,Redis会做一下三个操作:
1.计算出大小是否足够
2.开辟空间至满足所需大小
3.开辟与已使用大小len相同长度的空闲free空间(如果len < 1M)开辟1M长度的空闲free空间(如果len >= 1M)
Redis字符串的性能优势
快速获取字符串长度
避免缓冲区溢出
降低空间分配次数提升内存使用效率