面试官:听说你精通Redis,那我就考考你吧面试官:不用慌尽管说,错了也没关系😊。。。以【面试官面试】的形式来分享技术,本期是《Redis系列》,感兴趣就关注我吧❤️
好的,我了解的主要有:
面试官思考中…
好的,字典其实是一个集合里包含了多个键值对,类似于Java的HashMap。
它的底层包含了两个哈希表,一个平常使用,一个在迁移扩展哈希表rehash时使用。
迁移完成后,原先日常使用的旧哈希表会被清空,新的哈希表变成日常使用的。
面试官思考中…
有区别的,面向对象不同。
字典是Redis内部的底层数据结构支持,而Redis的哈希对象是对外提供的一种对象。
面试官思考中…
它的底层结构类似于一个值 + 保存了指向其他节点的level数组(层),而这个level数组就是用来加快访问其他节点的速度。
typedef struct zskiplistNode {
// level数组
struct zskiplistLevel {
//前进指针
struct zskiplistNode *forward;
//跨度
unsigned int span;
} level[];
// 后退指针
struct zskiplistNode *backward;
// 分值
double score;
// 成员对象
robj *obj;
} zskiplistNode;
面试官思考中…
这个设计主要是考虑了性能因素。
所以Redis集合了两种数据结构,同时这两种数据结构通过指针来共享变量也不会浪费内存。
typedef struct zset { // 有序集合
zskiplist *zsl; // 跳跃表
dict *dict; // 字典
} zset;
面试官思考中…
噢噢知道的。我了解的有两种。
# 可以看到创建了列表键类型,但实际存储类型是ziplist
redis> RPUSH lst 1 3 5 10086 "hello" "world"
(integer)6
redis> OBJECT ENCODING lst
"ziplist"
面试官抓抓脑袋,继续看你的简历......得想想考点你不懂的😰
好了,今天的分享就先到这,我们下期【Redis系列】继续。
创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。