Redis面试题汇总
-
Redis语法
- redis支持的数据结构?
答:支持字符串、哈希、list、set、soredset等数据结构
2.redis如何实现string,这样实现有什么好处?
答:摘选自《Redis的设计与实现》
好处:(1)可以常数复杂度获取字符串长度
(2)杜绝缓冲区溢出
(3)减少修改字符串时,带来的内存分配次数
3.redis的hash怎么实现的?rehash过程讲一下;
答:如图所示,index就是索引位置
Rehash过程:哈希结构如图所示
(1)为ht[1]分配空间:空间大小如下:
<1>若是扩展大小:分配大小=(第一个大于等于ht[0]*used*2)的2的n次方的数;<2>若是缩小大小:分配大小=(第一个大于等于ht[0]*used)的 2的n次方的数;
(2)将ht[0]保存的所有键值对重建计算计算索引值,保存到ht[1];
(3)全部迁移之后,将ht[0]置为空,释放ht[0],把ht[1]设置为ht[0],并在ht[1]新建一个空白哈希表,为下一次rehash准备。
4.Redis的zset实现原理是什么?为什么不用红黑树来实现?
答:zset的底层结构同时使用了字典与跳跃表的;
红黑树是一种存在于内存中的结构,可以保证在最坏的情况下,对红黑树进行例如search,insert,以及delete等基本的动态集合操作的时间复杂度为O(lg n)。而跳跃表则是一种随机性的结构,所以在跳表中的搜索、插入、删除操作的时间复杂度就都为O(logn),但在最坏的情况下,它的时间复杂性又会变成O(n)
5.讲讲redis里面的哈希表?
答:哈希结构如图所示:
哈希表节点如图所示: