Redis相关

1、Redis是线程安全的吗?

Redis是单进程的,所以是线程安全的。Redis是利用队列技术将并发访问变为串行访问。

2、为什么使用Redis,它有什么好处?

(1)速度快,因为数据存放在内存中。

(2)支持多种数据类型,支持String,List,Set,Sorted set,Hash(底层相当于一个Map结构)。

(3)提供了RDB和AOF两种持久化方式。

(4)丰富的特性:可用作缓存,消息,可以按key设置过期时间,过期将会自动删除。

(5)支持事务,操作都是原子性。

      Redis的事务没有关系数据库事务提供的回滚(rollback)功能。为此开发者必须在事务执行出错后自己收拾剩下的摊子(将数据库复原回事务执行前的状态等,这里我们一般采取日志记录然后业务补偿的方式来处理,但是一般情况下,在redis做的操作不应该有这种强一致性要求的需求,我们认为这种需求为不合理的设计)。

3、RDB和AOF的区别

RDB持久化:是将在指定的时间间隔内生成的数据集备份到磁盘中。(可能丢失一段时间的数据)。

AOF持久化:记录的是服务器执行的所有写操作指令,并在服务器启动时,通过重新执行这些命令来还原数据集。AOF可以每秒同步一次(默认方式),也可以每次执行写入命令时同步一次。

4、redis常见性能问题和解决方案?

(1)Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件,特别是不要启用内存快照做持久化。

Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。对于Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度,如果重写AOF文件,AOF在重写的时候会占大量的CPU和内存资源,出现短暂服务暂停现象。

(2)如果数据比较重要,某个Slave开启AOF备份数据,策略设置为每秒同步一次。

(3)为了主从复制的速度和连接的稳定性,Master和Slave最好在同一个局域网内。

5、mySQL里有2000w数据,redis中只存20w的数据,如何保证redis中的数据都是热点数据?

相关知识:redis内存数据集大小上升到一定大小的时候,就会施行数据淘汰策略。redis提供6种数据淘汰策略:

volatile-lru:从已设置过期时间的数据集(server.db[i].expires)中挑选最近最少使用的数据淘汰。

volatile-ttl:从已设置过期时间的数据集(server.db[i].expires)中挑选将要过期的数据淘汰。

volatile-random:从已设置过期时间的数据集(server.db[i].expires)中任意选择数据淘汰。

allkeys-lru:从数据集(serverdb[i].dict)中挑选最近最少使用的数据淘汰。

allkeys-random:从数据集(server.db[i].dict)中任意选择数据淘汰。

no-enviction(驱逐):禁止驱逐数据。

6、redis的多路复用技术

redis是一个单线程却性能非常好的内存数据库,主要用来作为缓存系统。redis采用网络IO多路复用技术来保证在多连接的时候,系统的高吞吐量。

为什么redis中要使用I/O多路复用这种技术呢?

首先,redis是跑在在单线程中的,所有的操作都是按照顺序线性执行的,但是由于读写操作等待用户输入或输出都是阻塞的,所以I/O操作在一般情况下往往不能直接返回,这会导致某一文件的I/O阻塞导致整个进程无法对其他用户提供服务,而I/O多路复用技术就是为了解决这个问题而出现的。

redis的io模型主要基于epoll实现的,不过它也提供了select和kqueue的实现,默认采用epoll。

那么epoll到底是个什么东西呢?其实是众多i/o多路复用技术当中的一种而已,但是相比其他io多路复用技术(select,poll等等),epoll有诸多优点:

(1)epoll没有最大并发连接的限制,上限是最大可以打开文件的数目,这个数字一般远大于 2048, 一般来说这个数目和系统内存关系很大  ,具体数目可以 cat /proc/sys/fs/file-max 察看。

(2)效率提升,Epoll最大的优点就在于它只管你“活跃”的连接,而与连接总数无关,因此在实际的网络环境中,Epoll的效率就会远远高于select和poll。

(3)Epoll使用了“共享内存”,就省略了内存拷贝。

 

 

 

Redis相关的面试题涵盖了以下几个方面: 1. Redis的基本概念和特性:面试官可能会问到你对Redis的理解和熟悉程度。你可以回答Redis是一个开源的内存键值存储系统,具有高性能和持久化能力。它支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。 2. Redis的数据持久化方式:Redis提供了两种方式来将数据持久化到磁盘上,分别是RDB(Redis Database)和AOF(Append Only File)。RDB是一种快照方式,可以将数据以二进制形式保存到硬盘上,而AOF则是将每个写操作追加到文件末尾。你可以解释一下这两种方式的优缺点,并说明在不同场景下应该选择哪种方式。 3. Redis的线程模型:在Redis 6.0之前,Redis是单线程的。而在Redis 6.0之后开始支持多线程。Redis内部使用基于epoll的多路复用来处理网络IO,而执行命令的核心模块仍然是单线程的。你可以简要介绍一下Redis的线程模型以及引入多线程的原因。 4. Redis的扩展模块:Redis支持通过扩展模块来增加额外的功能。例如,BloomFilter、RedisSearch和Redis-ML等扩展模块可以用于实现不同的功能需求。你可以提到一些常用的Redis扩展模块,并解释一下它们的作用和用途。 总结起来,面试中关于Redis的问题主要包括对Redis的基本概念和特性的理解、数据持久化方式、线程模型以及扩展模块的使用等方面。通过对这些问题的了解和回答,可以展示出你对Redis的熟悉程度和实际应用能力。同时,你还可以结合自己的经验和实际项目,给出一些实际的应用场景和解决方案,从而更好地回答面试官的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [面试 Redis 没底?这 40 道面试题让你不再慌(附答案)](https://blog.csdn.net/xmt1139057136/article/details/115423283)[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%"] - *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%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值