收集几十位大厂面试者的面试题及见解-Redis模块

一 Redis基本数据类型

1.1 Redis中数据类型有哪些?底层实现是什么?不同的数据类型运用到什么场景?

String、hash、list、set、sorted_set/zset
hash 底层是hash表实现的数据存储。
list 能存储多个数据,按照插入顺序排序,底层使用双向链表实现。
set 和hash存储结构完全相同,仅存储键值,不存储value。且键值不允许重复。存储大量数据,且快速查询。
zset 是字典(dict) + 跳表(skiplist),数据比较少的时候用ziplist编码结构存储。是有序集合,不允许有重复的数据结构,每一个元素关联double类型分数。通过分数对集合中元素从小到大排序。成员唯一的,分数不唯一的。

string 微博上大v的访问量存储。
hash 商品的抢购可以用,店铺的id为key,商品id为filed,数量为value。
list 对有顺序的信息管理。
set 用于黑白名单。

1.2 Redis中哪里用了跳表?数据结构是什么?跳表插入和删除的大概过程,跳表相对普通链表有什么优势,是怎么提高访问效率的?

zset底层就使用了跳跃表,是由多层多链表实现。
在进行数据插入时候,先插入底层,然后利用算法(类似抛硬币算法),如果正面插入l2层,然后继续利用算法计算是否还继续向上层插入,当判断不需要插入,元素就插入结束。
删除元素,从上到下找到元素,找到删除,一直到最底层。

跳跃表在查询时候速度很快,因为在跳跃表中每个列表都是有顺序的。从上层往下查找,每一层查询到查询结束,如果比某一个节点大向右边,比一个节点大向左边。然后一层层查询。

1.3 整数集合、压缩列表实现原理?

是集合(set)的底层实现之一,当一个集合(set)只包含整数值元素,并且这个 集合的元素不多时,Redis就会使用整数集合(intset)作为该集合的底层实现。

压缩列表(ziplist)是列表键和哈希键的底层实现之一。当一个列表只包含少量列表项时,并且每个列 表项时小整数值或短字符串,那么Redis会使用压缩列表来做该列表的底层实现。 压缩列表(ziplist)是Redis为了节省内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数 据结构,一个压缩列表可以包含任意多个节点(entry),每个节点可以保存一个字节数组或者一个整 数值。

1.4 SDS动态字符串的优点是什么?

  1. len 保存了SDS保存字符串的长度 。
  2. buf[] 数组用来保存字符串的每个元素。
  3. free记录了 buf 数组中未使用的字节数量 。

好处:获取 SDS 字符串的长度只需要读取 len 属性,时间复杂度为 O(1)。

1.5 Redis事务回滚?

Redis中是不支持回滚的,可以使用lua脚本执行redis条命令。

1.6 Redis中数据字典如何更新?hash 冲突怎么办,rehash,负载因子?

是一种用于保存键值对的抽象数据结构。字典中的每一个键 key 都是唯一的,通过 key 可以对值来进行查找或修改。redis地址底层是hash表实现。

1.7 Redis中的数据类型有哪些 bitmap和grap类型用法

1.8 zset的zrange时间复杂度?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值