redis面试题
文章平均质量分 63
无语堵上西楼
这个作者很懒,什么都没留下…
展开
-
redis的集群脑裂
的配置,可以设置最少的从节点数量以及缩短主从数据同步的延迟时间,达不到要求就拒绝请求,就可以避免大量的数据丢失。,就像大脑分裂了一样,这样会导致客户端还在老的主节点那里写入数据,新节点无法同步数据,,所以通过选举的方式提升了一个从节点为主,这样就存在了两个master。会将老的主节点降为从节点,这时再从新。表示数据复制和同步的延迟不能超过。集群脑裂是由于主节点和从节点和。原创 2024-03-18 16:41:31 · 310 阅读 · 0 评论 -
数据类型及其业务场景
具体来说,它是由多个压缩列表和少量双向链表组成的,其中每个压缩列表都作为一个小的块来存储一定数量的元素。,特别是在元素的中间位置插入或删除操作时,会导致整个压缩列表的重建。无法直接访问中间位置的元素、插入或删除操作可能会引起整个压缩列表的重分配等,此外压缩列表在插入或删除元素时,可能需要进行。来说,每个存储元素相当于有两个值组成的,一个是有序结合的元素值,一个是排序值。组在容量不足时,需要重新分配更大的内存空间,并将原来的数据复制到新的内存空间中,这会导。而数组中的元素大小是固定的,无。原创 2024-03-18 15:34:24 · 913 阅读 · 0 评论 -
redis的大Key问题
所谓的大key问题是某个key的value比较大,所以本质上是大value问题。大Key问题的坏处最典型的就是阻塞线程,并发量下降,导致客户端超时,服务端业务成功率下降。命令该命令可以列出Redis中大小最大的key。这个命令只在Redis 4.0或更高版本中可用。2.Redis内置命令对目标Key进行分析STRING类型:执行命令,返回对应Key的value的字节数。LIST类型:执行命令,返回对应Key的列表长度。HASH类型:执行。原创 2024-03-16 22:41:05 · 394 阅读 · 0 评论 -
Redisson分布式锁的原理
分布式锁就要考虑锁的续期、释放、可重入、互斥等问题。Redisson这个客户端是目前最完美的一种方案,它在内部可以对锁进行自动续期,程序执行结束、发生异常或者整个应用挂掉都可以释放锁,可重入和互斥也都处理的很好。有Redisson了,我们没必要自己手写分布式锁了,手写的分布式锁不如Redisson考虑的全面的。原创 2023-11-22 11:50:24 · 855 阅读 · 0 评论 -
Redis通信协议之RESP协议
try {// 1.建立连接// 2.获取输出流、输入流// 3.发出请求// 3.1.获取授权 auth 123321// 3.2.set name 虎哥sendRequest("set", "name", "虎哥");// 4.解析响应// 3.2.set name 虎哥// 4.解析响应// 3.2.set name 虎哥// 4.解析响应// 5.释放连接try {if (reader!if (writer!if (s!原创 2023-11-29 18:10:42 · 94 阅读 · 0 评论 -
Redis网络模型原理
服务器大多都采用Linux系统,这里我们以Linux为例来讲解:ubuntu和Centos 都是Linux的发行版,发行版可以看成对linux包了一层壳,任何Linux发行版,其系统内核都是Linux。我们的应用都需要通过Linux内核与硬件交互用户的应用,比如redis,mysql等其实是没有办法去执行访问我们操作系统的硬件的,所以我们可以通过发行版的这个壳子去访问内核,再通过内核去访问计算机硬件。原创 2023-11-29 17:34:22 · 235 阅读 · 0 评论 -
Redis数据结构原理
压缩列表的可以看做一种连续内存空间的"双向链表"列表的节点之间不是通过指针连接,而是记录上一节点和本节点长度来寻址,内存占用较低如果列表数据过多,导致链表过长,可能影响查询性能增或删较大数据时有可能发生连续更新问题。原创 2023-11-29 14:00:20 · 118 阅读 · 0 评论 -
Redis分片集群
主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:海量数据存储问题高并发写的问题使用分片集群可以解决上述问题,如图:分片集群特征:集群中有多个master,每个master保存不同数据每个master都可以有多个slave节点master之间通过ping监测彼此健康状态客户端请求可以访问集群任意节点,最终都会被转发到正确节点。原创 2023-11-29 11:03:56 · 23 阅读 · 0 评论 -
redis的哨兵原理
Sentinel的三个作用是什么?监控故障转移通知Sentinel如何判断一个redis实例是否健康?每隔1秒发送一次ping命令,如果超过一定时间没有相向则认为是主观下线如果大多数sentinel都认为实例主观下线,则判定服务下线故障转移步骤有哪些?首先选定一个slave作为新的master,执行slaveof no one然后让所有节点都执行slaveof 新master修改故障节点配置,添加slaveof 新master。原创 2023-11-29 10:35:10 · 512 阅读 · 0 评论 -
redis的repl_backlog原理
此时,如果有新的数据写入,就会覆盖数组中的旧数据。不过,旧的数据只要是绿色的,说明是已经被同步到slave的数据,即便被覆盖了也没什么影响。因为未同步的仅仅是红色部分。棕色框中的红色部分,就是尚未同步,但是却已经被覆盖的数据。此时如果slave恢复,需要同步,却发现自己的offset都没有了,无法完成增量同步了。slave与master的offset之间的差异,就是salve需要增量拷贝的数据了。这个文件是一个固定大小的数组,只不过数组是环形,也就是说。,这样数组头部的数据就会被覆盖。原创 2023-11-29 10:26:24 · 212 阅读 · 1 评论 -
为什么 Redis 集群的最大槽数是 16384 个?
哈希槽哈希槽Redis-Cluster 集群模式使用了哈希槽(hash slot)来实现数据的分片,hash slot 的默认长度是 16384. 应用程序去存储一个 key 的时候,会通过 CRC16 计算后取模路由到对应 hash slot 所在的节点。原创 2023-11-08 17:05:35 · 339 阅读 · 0 评论 -
Redis 中的哨兵选举算法是如何实现的?
哨兵机制哨兵机制Redis 里面的 Master-Slave 集群,是不具备故障恢复能力的。也就是 Master 节点挂了以后,需要从集群中的其他 Slave 节点选举新的 Master 继续提供服务。因此在 Redis 里面引入了 Sentinel 哨兵机制,通过哨兵来监控集群的状态, 实现 Master 选举。哨兵是一个单独的进程,所以为了保证哨兵的可靠性,我们也会对哨兵做部署集群。原创 2023-11-08 16:49:55 · 47 阅读 · 0 评论 -
什么是热 Key 问题,如何解决热 key 问题
一般情况下,我们可以通过监控工具、或者客户端程序上报的方式来识别热点 key。关于热点 key,简单理解,就是访问频率发很高的 key,由于访问量较大,热点 key 有可能会导致服务器资源不足出现宕机的问题。使用多级缓存的设计,通过增加本地缓存的方式减少目标节点的访问。通过对访问频率较高的节点进行扩容,通过负载均衡的方式分散流量。把热点 key 进行拆分,实现并发流量的分流。在一些高并发的场景中,比如秒杀、热搜等。由于资源分配不平衡导致访问热点问题。原创 2023-11-08 16:19:12 · 111 阅读 · 0 评论 -
Redis 遇到 Hash 冲突怎么办?
Hash 结构Hash 结构Redis 里面的的 Hash 结构的底层数据结构(如图),是使用了一张全局 hash表来保存的所有键值对,这张哈希表,有多个哈希桶组成,哈希桶中的 entry 元素保存了key和 value 指针,其中key指向了实际的键,value 指向了实际的值。hash 冲突。原创 2023-11-08 16:10:17 · 249 阅读 · 0 评论 -
Redis 主从复制的原理
Redis 主从复制包括全量复制和增量复制:全量复制是发生在初始化阶段,从节点会主动向主节点发起一个同步请求,主节点收到请求后会 会生成一份当前数据的快照发送给从节点,从节点收到数据进行加载后完成全量复制。增量复制是发生在每次 Master 数据发生变化的过程中,会把变化的数据同步给所有的从节点。增量复制是通过维护 Offset 这个复制偏移量来实现的。原创 2023-11-08 14:03:05 · 28 阅读 · 0 评论 -
Redis 哨兵机制和集群有什么区别?
在 Redis Cluster 中,引入了 Slot 槽来实现数据分片,Slot 的整体取值范围是 0~16383,每个节点会分配一个 Slot 区间当我们存取 Key 的时候,Redis 根据 key 计算得到一个 Slot 的值,然后找到对应的节点进行数据的读写。在高可用方面,Redis Cluster 引入了主从复制模式, 一个 Master 节点对应一个或多个 Slave 节点,当 Master 出现故障,会从 Slave 节点中选举一个新的 Master 继续提供服务。客户端的实现会更加复杂。原创 2023-11-08 13:24:42 · 64 阅读 · 0 评论 -
分布式锁的理解,以及redis分布式锁的实现
分布式锁应该是一个 CP 模型,而 Redis 是一个 AP 模型,所以在集群架构下由于数据的一致性问题导致极端情况下出现多个线程抢占到锁的情况很难避免。那么基于 CP 模型又能实现分布式锁特性的组件,我认为可以选择 Zookeeper 或者etcd,在数据一致性方面,zookeeper 用到了 zab 协议来保证数据的一致性,etcd用到了 raft 算法来保证数据一致性。原创 2023-11-08 11:07:04 · 33 阅读 · 0 评论 -
Redis 的内存淘汰算法和原理是什么?Redis 有哪些过期策略
所以,通过 LFU 算法改进之后,就可以真正达到非热点数据的淘汰了。当然,LFU 也 有缺点,相比 LRU 算法,LFU 增加了访问频次的维护,以及实现的复杂度要比 LRU 更高。原创 2023-11-07 18:31:01 · 41 阅读 · 0 评论 -
RDB 和 AOF 的实现原理以及优缺点
持久化机制的特性持久化机制的特性RDB 和 AOF 都是 Redis 里面提供的持久化机制,RDB 是通过快照方式实现持久化、AOF 是通过命令追加的方式实现持久化。机制的工作原理说明这两种机制的工作原理。RDBRDB 持久化机制会根据快照触发条件,把内存里面的数据快照写入到磁盘,以二进制的压缩文件进行存储。RDB 快照的触发方式有很多,比如执行 bgsave 命令触发异步快照,执行 save 命令触发同步快照,同步快照会阻塞客户端的执行指令。原创 2023-11-07 17:29:48 · 103 阅读 · 0 评论 -
Redis 存在线程安全问题吗?为什么?
(如图)虽然 Redis Server 中的指令执行是原子的,但是如果有多个 Redis 客户端同时执行多个指令的时候,就无法保证原子性。(如图)虽然 Redis 6.0 里面,增加了多线程的模型,但是增加的多线程只是用来处理网络 IO 事件,对于指令的执行过程,仍然是由主线程来处理,所以不会存在多个线程通知执行操作指令的情况。当然,对于客户端层面的线程安全性问题,解决方法有很多,比如尽可能的使用 Redis里面的原子指令,或者对多个客户端的资源访问加锁,或者通过 Lua 脚本来实现多个指令的操作等等。原创 2023-11-07 17:09:23 · 123 阅读 · 0 评论 -
Redis 为什么这么快?
Redis 本身的数据结构也做了很多的优化,比如压缩表、跳跃表等方式降低了时间复杂读,同时还提供了不同时间复杂度的数据类型。使得开发人员能够有更多合适的选择。原创 2023-11-07 16:44:29 · 19 阅读 · 0 评论 -
Redis 的理解
基于这些特点,Redis 一般用来实现分布式缓存,从而降低应用程序对关系型数据库检索带来的性能影响。除此之外,Redis 还可以实现分布式锁、分布式队列、排行榜、查找附近的人等功能,为复杂应用提供非常方便和成熟的解决方案。Redis 底层采用单线程实现数据的 IO,所以在数据算法层面并不需要要考虑并发安全性,所以底层算法上的时间复杂度基本上都是常量。Redis 虽然是内存存储,但是它也可以支持持久化,避免因为服务器故障导致数据丢失的问题。它是基于内存存储,在进行数据 IO 操作时,能够 10WQPS。原创 2023-11-07 16:39:21 · 16 阅读 · 0 评论 -
redis的穿透、击穿、雪崩
查询数据穿透redis,如果在数据库查询数据无论是否存在,都将数据缓存到redis里面,这样下次发出相同请求的时候不会穿透redis。,比如一个不存在的id=-1或者随机数id的数据,这种数据在是没有的,将导致直接穿透缓存,打在数据库上导致数据库宕机。redis采用集群部署,把热点的key放到不同的节点上,让热点缓存平均分配在这个不同的redis节点上。设置缓存的失效时间,让它不要在同一时间失效,设置缓存时间的时候随机设置失效时间。设置定时认为,去定时的刷新缓存的失效时间。key的请求打到数据库上。原创 2023-07-19 23:30:58 · 56 阅读 · 0 评论 -
redis的aof的重写机制
redis有两中数据持久化的方法,RDB和AOF。其中的AOF技术是相对RDB几乎实时去实现数据指令的一个持久化,将每一个数据操作指令以日志追加形式写入aof文件里面,但是如果一直追加有可能导致aof文件过大,造成IO性能的问题,为解决这个aof文件过大问题,redis设计出AOF重写机制。原创 2023-07-12 22:39:30 · 639 阅读 · 1 评论