Redis面试题:区别网上各种面试题,全是秋招经历后的高频题,看了一定不会后悔!

本文详细探讨了Redis的关键概念,包括其与Memcached的区别、作为MySQL缓存的原因、数据类型及其应用场景,以及单线程模式、数据持久化、服务高可用等核心问题。还涉及Redis的内存管理、过期策略、缓存问题及分布式锁的实现。
摘要由CSDN通过智能技术生成

在你阅读之前,先插播个小广告,博主有一个面经专栏,全部都是2024秋招准备的内容,相比于网络上其他的面经,有着面试的所有过程,还有最全的面试答案,不需要再到处找,如果你想获得大厂的offer,认真准备面经是必不可少的,专栏会持续更新至少100篇内容,现在已经更新10+内容了,如果想学习所有的面经,欢迎订阅博主的专栏呀,保证每一篇都是匠心独创,绝对物超所值,下面就开始学习吧~

目录

1、什么是redis?

2、Redis 和 Memcached 有什么区别?

3、为什么用 Redis 作为 MySQL 的缓存?

4、Redis 数据类型以及使用场景分别是什么?

5、五种常见的 Redis 数据类型是怎么实现?

6、listpack是什么?

7、Redis 是单线程吗?

8、Redis 单线程模式是怎样的?

9、Redis 采用单线程为什么还这么快?

10、Redis 6.0 之前为什么使用单线程?Redis 6.0 之后为什么引入了多线程?

11、Redis 如何实现数据不丢失?

12、AOF 日志过大,会触发什么机制?

13、重写 AOF 日志的过程是怎样的?

14、RDB 快照是如何实现的呢?

15、RDB 在执行快照的时候,数据能修改吗?

16、为什么会有混合持久化?

17、Redis 如何实现服务高可用?

18、集群脑裂导致数据丢失怎么办?

19、Redis 使用的过期删除策略是什么?

20、Redis 内存满了,会发生什么?

21、LRU 算法和 LFU 算法有什么区别?

22、了解缓存雪崩、缓存击穿、缓存穿透吗?

23、如何保证数据库和缓存的数据一致性?

24、redis的大key如何处理?

25、redis的管道有什么用?

26、为什么redis不支持事务回滚?

27、如何使用redis实现分布式锁?


1、什么是redis?

        redis是一个内存数据库,数据的读写操作都在内存中进行,因此速度非常快,常用于缓存,消息队列,分布式锁等场景。

2、Redis 和 Memcached 有什么区别?

        首先两者都是内存数据库,性能非常高,但是redis 有更丰富的数据结构,数据可以持久化,支持集群,还有发布订阅、lua脚本、事务等功能,因此使用redis更多一点。

3、为什么用 Redis 作为 MySQL 的缓存?

        redis兼具高性能、高并发两大特性,高性能是因为redis对于数据的读写操作都是在内存中进行的,因此性能非常高,高并发是指redis的单机吞吐率是10w,大约是mysql的10倍左右。

4、Redis 数据类型以及使用场景分别是什么?

        String,主要用于缓存对象等;

        list,主要用于消息队列,但是存在着生产者无法自动生成全局唯一ID,无法以消费组形式消费等问题;

        hash,主要用于缓存对象等;

        set,主要用于聚合计算,例如点赞,共同关注等;

        zset,主要用于排行榜,电话,姓名排序等;

        bitmap,主要用于记录签到情况,判断登录状态等;

        hyperloglog,主要用于百万的数据统计等;

        geo,主要用于存储位置;

        stream,主要用于消息队列,相对于list,能解决list存在的问题。

5、五种常见的 Redis 数据类型是怎么实现?

        String:sds

        list:quicklist

        hash:listpack 和 哈希表

        set:哈希表和整数集合

        zset:listpack 和 跳表

6、listpack是什么?

        listpack也叫紧凑列表,是用一块连续的内存空间来保存数据,为了节省内存空间,还使用多种编码方式来表示不同长度的数据。

7、Redis 是单线程吗?

        不是单线程,redis的单线程是指接收请求,解析请求,处理请求内容,返回结果这个过程是单线程的,但是redis还会在后台创建关闭文件,aof刷盘,释放内存的线程,主要也是因为这些操作比较费时。

8、Redis 单线程模式是怎样的?

        当有多个客户端链接时,会采用IO多路复用,epoll wait会发现事件然后分发给事件处理器,然后通过连接事件处理函数、读事件处理函数、写事件处理函数分别进行处理,连接事件处理函数会调用accept接收连接,然后将已连接的socket添加到epoll中,并注册读事件处理函数或写事件处理函数,读事件处理函数会调用read接收数据,写事件处理函数会调用write发送数据。写事件处理函数会将准备好的的数据发送到队列中,读事件处理函数,也会在数据准备完成后添加到发送队列,然后同时将执行结果加入到缓存中。

9、Redis 采用单线程为什么还这么快?

        redis 的大部分操作都在内存中完成,并采用了高效的数据结构;redis是单线程的,避免线程之间的竞争;redis采用了IO多路复用机制处理大量的客户端socket请求,因此速度比较快。

10、Redis 6.0 之前为什么使用单线程?Redis 6.0 之后为什么引入了多线程࿱

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

准入职的java螺丝钉一枚

你的鼓励是我继续不断创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值