Redis面试题(1)

文章介绍了Redis作为缓存的使用原因及其带来的性能提升,强调了Redis在内存中存储数据和提供多种数据结构的优势。此外,还讨论了Redis的单线程模型如何保证效率,并解释了其基于非阻塞IO多路复用的机制。文章还涵盖了Redis的数据持久化方法,包括RDB和AOF,以及它们的优缺点,并提到了混合持久化。最后,提到了Redis的主从同步策略和pipeline技术,用于优化网络传输开销。
摘要由CSDN通过智能技术生成

面试题大多都是网上搜集,自己通过打字的方式来记忆背诵,若有错误,还望读者指正。

1、为什么要使用缓存

        使用缓存能够提高读写的性能,在实际业务中能够提高读取性能,带来更高的并发量。我们经常使用Redis作为远程缓存来缓存DB中的热点数据,用于提高系统的读取性能,同时也降低对DB的读取压力。

2、使用Redis的好处

        Redis的数据是存储在内存当中,而且Redis本身的数据结构也保证了它获取数据的效率,所以数据获取快。

        Redis支持多种数据结构的使用,如字符串、列表、哈希、集合、有序集合等。

        Redis能够支持事务,操作能够遵循原子性【对数据的操作要么一起成功,要么一起失败】。

        Redis还提供了其他丰富的功能,队列、主从复制、集群、数据持久化等。

3、什么是Redis

        Redis是一个开源的、基于内存、支持多种数据类型的存储系统,它可以作为数据库、缓存、消息中间件。如上所述,还提供了非常多的数据结构,供操作者使用。如:Strings、hashes、lists、sets、sorted sets等,除此之外,还支持bitmaps、hyperLogLogs和geospatial等功能。

4、为什么Redis是单线程模型效率还很高

        Redis本身是由C语言实现,效率高。

        Redis是纯内存操作,它所有的运算都是内存级别的运算。

        Redis是基于非阻塞的IO复用模型机制。

        Redis的单线程就保证了它能够避免多线程下线程频繁切换的问题。

        Redis有非常丰富的数据结构,按需选取。

        【但是Redis因为是单线程的,所以在使用Redis的指令时需要十分谨慎,避免使用那些特别费时的命令,否则可能会造成卡顿。】

5、Redis的线程模型

        Redis是基于非阻塞的IO多路复用机制:Redis利用epoll来实现IO多路复用【若按照传统单线程,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以I/O操作在一般情况下往往不能直接返回,这会导致某一个文件的I/O阻塞导致整个进程无法对其他客户端提供服务,而I/O多路复用就是为了解决这个问题出现的】

6、Redis为什么把所有数据放到内存中

        Redis将数据放置到内存中的好处就是得到了非常快的数据读取,如果放入到硬盘中,那么进行磁盘的IO操作会严重影响到Redis的性能。且Redis提供了数据持久化的功能【RDB和AOF】,就不需要担心服务器重启对内存中数据的影响。

7、Redis的同步机制

        Redis支持主从同步,从从同步。如果是第一次进行主从同步,主节点需要使用bgsave命令,再将后续修改操作记录到内存的缓存去

8、pipeline的好处

        管道(pipeline):客户端可以一次性发送多个请求而不需要等待服务器的响应,等到所有命令都发送完成后,再一次性读取服务的响应,这样就极大的降低了多条命令执行的网络传输开销,将命令放入到管道中,然后管道将多个命令发送到服务器,相当于只做了一次命令执行的网络开销。但是要求管道中执行的指令间没有因果关系。【注意pipeline命令打包命令发送,redis必须在处理完所有命令前缓存起所有命令的处理结果,打包的越多,缓存消耗内存也越多。】

9、Redis的持久化方式

        RDB快照(snapshot):在默认情况下,Redis将内存数据库快照保存到命名为dump.rdb的二进制文件中。可以对Redis进行设置,使得满足条件“在多少秒内数据有多少次改动”,自动保存一次数据集。【例如 save 30 100;在30秒内有100个键被改动了,就自动保存一次数据】,也可以使用手动的方式来生成RDB快照,命令save或者bgsave。每次命令执行都会将所有redis内存快照到一个新的RDB文件,来覆盖原来的RDB快照。

        RDB的优点:只有一个文件dump.rdb,方便持久化。容灾性强,可以将文件存放在一个安全的磁盘。性能最大化,bgsave生成RDB快照时,通过子进程来完成快照的保存,主进程继续处理命令,保证了高效性。数据集如若很大,那么较之于AOF的启动效率更高。

        RDB的缺点:数据的安全性低,RBD是间隔一段时间来进行持久化的,如果在这段时间内Redis发生故障,那么会发生数据丢失,所以RDB的方式适用于对数据要求不严谨的时候。

        AOF快照(append-only file):AOF持久化,将修改的每一条指令记录进文件appendonly.aof中。

        使用者可以通过修改配置文件打开AOF功能。每写一次命令,这个命令就会被追加到AOF文件的末尾。当Redis出现故障,重新启动的时候,程序就可以通过重新执行AOF文件中的命令来达成重建数据的目的。

        AOF的优点:数据安全性高,每进行一次命令操作就会记录到AOF文件中一次。

        AOF的缺点:AOF文件比RDB文件大,所以AOF的恢复速度会慢。当数据集大的时候,那么比RDB启动的效率低。

        Redis4.0 混合持久化:采用混合持久化必须在配置文件中开启aof。开启混合持久化,是将某一刻的数据做RDB快照处理,当使用者进行操作后,将RDB快照内容和增量的AOF修改内存数据的命令放在一起,都写入到AOF文件中。每进行一次混合持久化,就会将数据整合。

10、RDB和AOF该选择哪一个

        不能仅仅使用RDB,这样会导致失去很多的数据。

        不能仅仅使用AOF,AOF做冷备的恢复速度没有RDB做冷备的恢复速度块。

        Redis能够支持同时开启两种持久化方式,也就是混合持久化,用AOF来保证数据不丢失,作为数据保证恢复的前提,用RDB来做不同程度的冷备,在AOF文件损坏的时候,还可以使用RDB来进行快速的数据恢复。

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于Java和Redis面试题,你可以参考以下资源: 1. "Java基础教程(入门篇)"这本书中可能包含与Java和Redis相关的基础知识点,例如如何连接和操作Redis以及在Java中使用Redis的常见场景。 2. "java面试大集合"这本书中可能包含Java和Redis面试题,涵盖了Java技术栈以及与Redis相关的问题。你可以浏览这本书中的相关章节以寻找你感兴趣的Java和Redis面试题。 3. "Java基础教程(进阶篇)"这本书可能包含更深入的Java和Redis面试题,例如Java高并发和如何在Java中使用Redis进行缓存。 这些资源可能会给你提供一些有关Java和Redis面试题的参考。你可以根据自己的需求和兴趣选择适合的资源进行学习。希望这些资源能帮助到你。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [redis面试题总结(附答案)](https://blog.csdn.net/guorui_java/article/details/117194603)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [java面试大集合一共485页](https://download.csdn.net/download/wm9028/88268176)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值