Redis面试题
文章平均质量分 50
似来
一个老程序员
展开
-
大厂面试题-Redis多线程模型怎么理解,那它会有线程安全问题吗?
2、如果指令的执行使用多线程,那Redis为了解决线程安全问题,需要对数据操作增加锁的同步,不仅仅增加了复杂度,还会影响性能,代价太大不合算。最后,Redis6.0里面多线程默认是关闭的,需要在redis.conf文件里面修改io-threads-do-reads配置才能开启。Redis在6.0支持的多线程,并不是说指令操作的多线程,而是针对网络IO的。存的IO操作,本身不存在性能瓶颈,Redis在数据结构上已经做了非常多的优。另外还要注意,Redis本身虽然是线程安全的,但是应用程序对于Redis的。原创 2023-12-19 11:46:13 · 388 阅读 · 0 评论 -
大厂面试题-为什么Redis集群的最大槽数是16384个?
集群规模的限制:Redis Cluster不太可能扩展到超过1000个主节点,太多可能会导致网络拥堵等问题,因此,在这个限制条件下,采用16384个插槽的范围比较合适。16384个插槽可以确保每个master节点都有足够的插槽,同时也可以保证插槽数目不会过多或过少,从而保证了Redis Cluster的稳定性和高性能。因此每个节点需要维护的配置信息占用空间大小就是16384/节点数/8KB,假设是3个节点的集群,则每个节点需要维护的配置信息占用空间大小为2KB。,又可以保证管理复杂度和通信开销的可控性。原创 2023-12-11 09:50:12 · 454 阅读 · 0 评论 -
大厂面试题-Redis中的哨兵选举算法是如何实现的?
时,还会评估实例过往的网络连接情况,如果在一定时间内,Slave和Master经常。阶段,会过滤掉不健康的节点,比如(下线或者断线),或者没有回复Sentinel。哨兵存在集群的情况下,如果其中一个哨兵节点认为Redis集群主线故障,群的某个节点出现故障,而故障节点被其中一个Sentinel哨兵节点。在优先级和复制进度都相同的情况下,选用runID最好的,runID。程,所以为了保证哨兵的可靠性,我们也会对哨兵做部署集群。,哨兵节点检测到以后,会从Redis集群中的其他。原创 2023-12-11 09:47:15 · 367 阅读 · 0 评论 -
大厂面试题-什么是热Key问题,如何解决热key问题
key,简单理解,就是访问频率发很高的key,由于访问量较大,热点key有。一般情况下,我们可以通过监控工具、或者客户端程序上报的方式来识别热点ke。点Key可能存在的影响,所以我们一般需要去尽可能的规避,从而避免出现性。1、在一些高并发的场景中,比如秒杀、热搜等。过增加本地缓存的方式减少目标节点的访问。3、通过对访问频率较高的节点。进行扩容,通过负载均衡的方式分散流量。key进行拆分,实现并发流量的分流。2、使用多级缓存的设计,通。致服务器资源不足出现宕机的问题。2、由于资源分配不平衡导。原创 2023-12-11 09:43:57 · 47 阅读 · 0 评论 -
大厂面试题-Redis遇到Hash冲突怎么办?
谓hash冲突,是指不同的key,计算出来的结果落到了同一个hash桶中。用了链式寻址法,也就是采用链表的方式来保存同一个hash桶中的多个元素。,这张哈希表,有多个哈希桶组成,哈希桶中的entry元素保。的key的冲突导致链表过长的情况下,会导致数据的。效率变慢,Redis是怎么解决这个问题的呢?主哈希表,一个用于扩容,称为备用哈希表。操作,也就通过增加哈希桶来减少冲突。(如图),是使用了一张全局hash。全局哈希表,一个用于当前使用,称。HashMap是一样的。表来保存的所有键值对。原创 2023-12-11 09:41:35 · 39 阅读 · 0 评论 -
大厂面试题-Redis有哪些过期策略
这种方式可以通过调整定时扫描的时间间隔和每次扫描耗时,实现在不同情况下使得CPU和内存资源达到最优的平衡效果。这种方案会周期性轮询redis库中的时效性数据,采用随机抽取的策略,利用过期数据占。点极端,Redis里面还有另外一种折中的方案,就是定期过期。有三种过期策略分别是:定时过期、惰性过期、定期过期。没有再次被访问,从而不会被清除,占用大量内存。该策略可以立即清除过期的数据,对内存很友好;同时使用了惰性过期和定期过期两种过期策略。期的数据,从而影响缓存的响应时间和吞吐量。是指每个设置过期时间的。原创 2023-12-11 09:39:18 · 32 阅读 · 0 评论 -
大厂面试题-Redis主从复制的原理
就是指Master收到数据变更之后,把变更的数据同步给所有Slave节点。一般发生在Slave节点初始化阶段,这个时候需要把master上所有数据都复制一份。从复制,是指在Redis集群里面(如图),Master节点和Slave节点数据同。每次传输数据,Master和Slave维护的Offset都会增加对应的字节数量。负责复制数据的来源称为master,被动接收数据并同步的节点称为slave。点,Salve节点收到数据后丢弃旧的数据,并重新载入。数据发生变化的过程中,会把变化的数据同步给所有的从节。原创 2023-12-11 09:38:10 · 372 阅读 · 0 评论 -
大厂面试题-Redis哨兵机制和集群有什么区别?
对于工作2年的同学来说,回答不需要太深入,但是5年以上的同学,会以这个问题作为切入口去深度考察求职者。按照我的理解,我认为您可能说的是Redis哨兵集群和Redis Cluster的区别。第三种集群方式,Redis Cluster(如图),它实现了Redis的分布式存储,我们存取Key的时候,Redis根据key计算得到一个Slot的值,然后找到对应的节。,一种是主从复制,一种是Redis Cluster,我不清楚您问的是哪。主从复制来实现的,所以它可以实现读写分离,分担Redis。原创 2023-12-11 09:34:34 · 368 阅读 · 0 评论 -
大厂面试题-请描述Redis的缓存淘汰策略
我们在使用缓存的时候,建议是增加这些缓存的过期时间。因为我们知道这些缓存大概的生命周期,从而更好的利用内存。面试点评Redis是一个内存数据库 ,而内存又是非常宝贵的资源。如何用有限的服务器资源来支撑更多业务,就必须要考虑到缓存的淘汰算法把一些不怎么使用缓存淘汰掉。因此,这个面试题的考察方向也很好,建议大家深度学习一下。原创 2023-12-11 09:30:50 · 368 阅读 · 0 评论 -
大厂面试题-怎么防止缓存击穿的问题?
另外,我们在整个缓存架构设计中,除了尽可能避免缓存穿透的问题,还需要从全局视角做整体考虑。很多面试题,其实更多的是考察求职者的技术底蕴以及思维边界,有些问题不一定会有答案,或者说在面试的过程中不一定立刻能提出非常好的解决办法。1、在Redis里面保存的热点key,在缓存过期的瞬间,有大量请求进来,导致请求全部打在数据库上。2、客户端恶意发起大量不存在的key的请求,由于访问的key对应的数据本身就不存。对于恶意攻击类的场景,可以使用布隆过滤器,应用启动的时候把存在的数据缓存。原创 2023-12-11 09:29:16 · 357 阅读 · 0 评论 -
大厂面试题-请描述一下Redis中AOF重写的过程
为了避免子进程在重写过程中,主进程的数据发生变化,导致AOF文件和Redis内存中的数据不一致的问题,Redis还做了一层优化。在实现数据持久化和重写的过程中,如何避免对客户端产生影响,还需要保证数据的一致性,从这些大神的解决思路中可以学到很多有价值的思想。近乎实时的去实现数据指令的持久化,因为AOF,会把每个数据更改的操作指令,追。在重写的过程中,主进程的数据变更需要追加到AOF重写缓冲区里面。然后,读取当前Redis里面的数据,写入到新的AOF文件里面。里面的一种数据持久化方式,原创 2023-12-09 12:12:59 · 389 阅读 · 0 评论 -
大厂面试题-说说缓存雪崩和缓存穿透的理解,以及如何避免
最后,数据库本身也有最大连接数的限制,超过限制的请求会被拒绝,再结合熔断机制,也能够很好的保护数据库系统,最多就是造成部分用户体验不好。这个场景的核心问题是针对缓存的一种攻击行为,因为在正常的业务里面,即便是出现了这样的情况,由于缓存的不断预热,影响不会很大。(如图)缓存雪崩,就是存储在缓存里面的大量数据,在同一个时刻全部过期,原本缓存组件抗住的大部分流量全部请求到了数据库。效的key也保存到Redis里面,并且设置一个特殊的值,比如“null”,这样。的不存在的key请求到应用里面,而这些不存在。原创 2023-12-09 12:10:32 · 23 阅读 · 0 评论 -
大厂面试题-请说一下你对分布式锁的理解,以及分布式锁的实现
这种方式虽然简单啊,但是要实现比较完整的分布式锁,还需要考虑重入性、锁失效机制、没抢占到锁的线程要实现阻塞等,就会比较麻烦。. 关系型数据库,可以使用唯一约束来实现锁的排他性,如果要针对某个方法加锁,就可以创建一个表包含方法名称字段,并且把。分布式锁和线程锁本质上是一样的,线程锁的生命周期是单进程多线程,分布式锁的声明周期是多进程多机器节点。2、可重入性,允许一个已经获得锁的进程,在没有释放锁之前再次重新获得锁。具备体系化的技术能力的时候,是很容易应对各种面试官的各种刁难的。原创 2023-12-09 12:06:23 · 386 阅读 · 0 评论 -
大厂面试题-Redis的内存淘汰算法和原理是什么?
当添加元素的时候,访问次数默认为1,于是找到相同访问频次的节点,然后添加到相同频率节点对应的双向链表头部。Redis4里面,增加了一个LFU的算法,相比于LRU,LFU增加了访问频率这个。果有有读写,就增加访问频率,如果一段时间内没有读写,就减少访问频率。LRU算法,LFU增加了访问频次的维护,以及实现的复杂度要比LRU更。中,可以用来解决top10的问题,或者在IM的场景中,缓存最近的聊天。2. TTL算法,在设置了过期时间的键中,把更早过期时间的k。现有点不一样,设计了冷热数据分离的一个结构。原创 2023-12-09 12:02:20 · 378 阅读 · 0 评论 -
大厂面试题-RDB和AOF的实现原理以及优缺点
2、RDB文件默认采用压缩的方式持久化,AOF存储的是执行指令,所以RDB在数据恢复的时候性能比AOF要好。1、执行bgsave命令触发异步快照,执行save命令触发同步快照,同步快照会阻塞客户端的执行指令。1、RDB是每隔一段时间触发持久化,因此数据安全性低,AOF可以做到实时持久化,数据安全性较高。】,AOF持久化机制是近乎实时的方式来完成持久化的,就是客户端执行一个。当AOF文件的大小达到某个阈值的时候,就会把这个文件里面相同的指令进。通过这样的回答,逻辑清晰,表达完整,会给面试官一个很好的感受。原创 2023-12-09 11:59:47 · 374 阅读 · 0 评论 -
大厂面试题-Redis存在线程安全问题吗?为什么?
2、如果采用多线程,意味着对于redis的所有指令操作,都必须要考虑到线程安全问题,也就是说需要加锁来解决,这种方式带来的性能影响反而更大。如图)虽然Redis6.0里面,增加了多线程的模型,但是增加的多线程只是用来处理。络IO事件,对于指令的执行过程,仍然是由主线程来处理,所以不会存在多个线程。里面的原子指令,或者对多个客户端的资源访问加锁,或者通过Lu。全性问题,解决方法有很多,比如尽可能的使用Redis。中的指令执行是原子的,但是如果有多个。的共享资源访问的竞争问题,使得数。据的安全性无法得到保障。原创 2023-12-09 11:56:18 · 78 阅读 · 0 评论 -
大厂面试题-Redis和MySQL如何保证数据一致性
删除缓存,再更新数据库,理想情况是应用下次访问Redis的时候,发现Redis。如果没有命中,就从数据库查询,查询到数据后再把这个数据缓存到Re。为这里是基于最终一致性来实现的,如果业务场景不能接受数据的短期不一致性,那。图)在这样一个架构中,会出现一个问题,就是一份数据,同时保存在数据库和。再更新缓存,如果缓存更新失败,就会导致数据库和Redis中的数。这种方式由于增加了锁的操作,所以在性能上会存在一定的影响。据的时候,首先会先尝试去Redis里面加载,如果命中就。的数据,直到数据更新完毕,从而保证。原创 2023-12-09 11:53:19 · 33 阅读 · 0 评论 -
大厂面试题-Redis为什么这么快
2.在Linux系统上Redis通过pipelining可以处理100w个请求每秒,而应用程序的计算复杂度主要是O(N)或O(log(N)),不会消耗太多CPU。在网络层面,Redis采用多路复用的设计,提升了并发处理的连接数,不过这个阶段,体的数据操作仍然是由主线程来处理的,所以我们可以认为Redis对于数据IO。层面来说,Redis本身就是一个内存数据库,内存的IO速度本身就很快,所以。本身的数据结构也做了很多的优化,比如压缩表、跳跃表等方式降低了时。中的数据操作,都需要通过同步的方式来保证。原创 2023-12-09 11:49:19 · 25 阅读 · 0 评论 -
大厂面试题-说一下你对Redis的理解
提供了非常丰富的数据存储结构,如String、List、Hash、Set、ZSet等。Redis底层采用单线程实现数据的IO,所以在数据算法层面并不需要要考虑并。绝大部分公司都采用Redis来实现分布式缓存,从而提高数据的检索效率。虽然是内存存储 ,但是它也可以支持持久化,避免因为服务器故障导致。除此之外,Redis还可以实现分布式锁、分布式队列、排行榜、查。它是基于内存存储,在进行数据IO操作时,能够10W。等功能,为复杂应用提供非常方便和成熟的解决方案。2. 目前市面上。原创 2023-12-09 11:47:17 · 26 阅读 · 0 评论