请选择 进入手机版 | 继续访问电脑版
查看: 79|回复: 26

[java面试] Redis常见面试题 这些答上来了Redis这块基本没什么大问题

[复制链接]

[java面试] Redis常见面试题 这些答上来了Redis这块基本没什么大问题[复制链接]

zygxsq 发表于 2021-10-4 00:15:17 [显示全部楼层] 回帖奖励 |倒序浏览 |阅读模式 回复:  26 浏览:  79
Redis主要考这些内容,大家可以参照看一下

具体面试题参考评论处

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
来自安卓客户端来自安卓客户端

本帖被以下淘专辑推荐:

回复

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

1498

主题

1837

帖子

7411

积分

超级版主

Rank: 8Rank: 8

积分
7411
zygxsq
 楼主|
发表于 2021-10-4 00:15:40 显示全部楼层
Redis 有哪些特性?

答案:

性能高, 读的速度是100000次/s,写的速度是80000次/s
数据持久化,支持RDB 、AOF
支持事务。通过MULTI和EXEC指令包起来。
多种数据结构类型
主从复制
其他特性:发布/订阅、通知、key过期等

来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

1498

主题

1837

帖子

7411

积分

超级版主

Rank: 8Rank: 8

积分
7411
zygxsq
 楼主|
发表于 2021-10-4 00:15:52 显示全部楼层
Redis 为什么这么快?

答案:

完全基于内存,没有磁盘IO上的开销,异步持久化除外
单线程,避免多个线程切换的性能损耗
非阻塞的IO多路复用机制
底层的数据存储结构优化,使用原生的数据结构提升性能。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

1498

主题

1837

帖子

7411

积分

超级版主

Rank: 8Rank: 8

积分
7411
zygxsq
 楼主|
发表于 2021-10-4 00:16:10 显示全部楼层
Redis 底层的基础数据结构有哪些?

答案:

字符串。没有采用C语言的传统字符串,而是自己实现的一个简单动态字符串SDS的抽象类型,并保存了长度信息。

链表(linkedlist)。双向无环链表结构,每个链表的节点由一个listNode结构来表示,每个节点都有前置和后置节点的指针

字典(hashtable)。保存键值对的抽象数据结构,底层使用hash表,每个字典带有两个hash表,供平时使用和rehash时使用。

跳跃表(skiplist)。跳跃表是有序集合的底层实现之一。redis跳跃表由zskiplist和zskiplistNode组成,zskiplist用于保存跳跃表 信息(表头、表尾节点、度等),zskiplistNode用于表示表跳跃节点,每个跳跃表的层高都是1- 32的随机数,在同一个跳跃表中,多个节点可以包含相同的分值,但是每个节点的成员对象必须是唯一的,节点按照分值大小排序,如果分值相同,则按照成员对象的大小排序。

整数集合(intset)。用于保存整数值的集合抽象数据结构,不会出现重复元素,底层实现为数组。

压缩列表(ziplist)。为节约内存而开发的顺序性数据结构,可以包含多个节点,每个节点可以保存一个字节数组或者整数值。

来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

1498

主题

1837

帖子

7411

积分

超级版主

Rank: 8Rank: 8

积分
7411
zygxsq
 楼主|
发表于 2021-10-4 00:17:48 显示全部楼层
Redis 支持哪些数据类型?

答案:五种常用数据类型:String、Hash、Set、List、SortedSet。三种特殊的数据类型:Bitmap、HyperLogLog、Geospatial,其中Bitmap 、HyperLogLog的底层都是 String 数据类型,Geospatial 底层是 Sorted Set 数据类型。

字符串对象string:int整数、embstr编码的简单动态字符串、raw简单动态字符串
列表对象list:ziplist、linkedlist
哈希对象hash:ziplist、hashtable
集合对象set:intset、hashtable
有序集合对象zset:ziplist、skiplist
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

1498

主题

1837

帖子

7411

积分

超级版主

Rank: 8Rank: 8

积分
7411
zygxsq
 楼主|
发表于 2021-10-4 00:18:16 显示全部楼层
Redis 常用的 5 种数据结构和应用场景?

答案:

String:缓存、计数器、分布式锁等
List:链表、队列、微博关注人时间轴列表等
Hash:用户信息、Hash 表等
Set:去重、赞、踩、共同好友等
Zset:访问量排行榜、点击量排行榜等
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

1498

主题

1837

帖子

7411

积分

超级版主

Rank: 8Rank: 8

积分
7411
zygxsq
 楼主|
发表于 2021-10-4 00:18:29 显示全部楼层
为什么采用单线程?

答案:官方回复,CPU不会成为Redis的制约瓶颈,Redis主要受内存、网络限制。例如,在一个普通的 Linux 系统上,使用pipelining 可以每秒传递 100 万个请求,所以如果您的应用程序主要使用 O(N) 或 O(log(N)) 命令,则几乎不会使用太多 CPU,属于IO密集型系统。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

1498

主题

1837

帖子

7411

积分

超级版主

Rank: 8Rank: 8

积分
7411
zygxsq
 楼主|
发表于 2021-10-4 00:18:42 显示全部楼层
Redis 6.0 之后又改用多线程呢?

答案:Redis的多线程主要是处理数据的读写、协议解析。执行命令还是采用单线程顺序执行。

主要是因为redis的性能瓶颈在于网络IO而非CPU,使用多线程进行一些周边预处理,提升了IO的读写效率,从而提高了整体的吞吐量。antirez 在 RedisConf 2019 分享时提到,Redis 6 引入的多线程 IO 对性能提升至少一倍以上。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

1498

主题

1837

帖子

7411

积分

超级版主

Rank: 8Rank: 8

积分
7411
zygxsq
 楼主|
发表于 2021-10-4 00:19:04 显示全部楼层
过期键Key 的删除策略有哪些?

答案:有3种过期删除策略。惰性删除、定期删除、定时删除

惰性删除。使用key时才进行检查,如果已经过期,则删除。缺点:过期的key如果没有被访问到,一直无法删除,一直占用内存,造成空间浪费。

定期删除。每隔一段时间做一次检查,删除过期的key,每次只是随机取一些key去检查。

定时删除。为每个key设置过期时间,同时创建一个定时器。一旦到期,立即执行删除。缺点:如果过期键比较多时,占用CPU较多,对服务的性能有很大影响。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

1498

主题

1837

帖子

7411

积分

超级版主

Rank: 8Rank: 8

积分
7411
zygxsq
 楼主|
发表于 2021-10-4 00:19:41 显示全部楼层
如果Redis的内存空间不足,淘汰机制?

答案:

volatile-lru:从已设置过期时间的key中,移出最近最少使用的key进行淘汰

allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)

volatile-ttl:从已设置过期时间的key中,移出将要过期的key

volatile-random:从已设置过期时间的key中,随机选择key淘汰

allkeys-random:从key中随机选择key进行淘汰

no-eviction:禁止淘汰数据。当内存达到阈值的时候,新写入操作报错

volatile-lfu:从已设置过期时间的数据集(server.db[i].expires)中挑选最不经常使用的数据淘汰(LFU(Least Frequently Used)算法,也就是最频繁被访问的数据将来最有可能被访问到)

allkeys-lfu:当内存不足以容纳新写入数据时,在键空间中,移除最不经常使用的key。
来自安卓客户端来自安卓客户端
回复 支持 反对

使用道具 举报

QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击领取双十一福利
1
QQ