redis面试题
Redis是什么,应用场景:
Redis是一种开源、内存中的数据存储系统,也被称为数据结构服务器。它支持多种数据结构(如字符串、哈希、列表、集合、有序集合、Bitmaps、HyperLogLogs等),并提供持久化、复制、事务、Lua脚本等功能。Redis常用于缓存、实时排行榜、计数器、消息队列、社交网络Feed流、Session共享、Geo地理位置索引等多种场景。
监控Redis是否出现故障:
可以通过监控Redis的响应时间、内存使用情况、CPU负载、磁盘IO、连接数、主从复制延迟等关键指标来判断Redis是否出现故障。此外,Sentinel(哨兵)也能监控Redis节点状态,并在主节点故障时自动完成故障转移。
Redis客户端timeout报错排查思路:
1. 检查网络连接是否正常,如防火墙、路由、DNS等问题。
2. 检查Redis服务器资源是否耗尽,如内存满载、CPU过高等导致无法及时响应请求。
3. 查看Redis服务器的慢查询日志,分析是否有耗时较长的操作。
4. 确认Redis客户端配置的超时时间和服务器响应时间是否匹配,适当调整客户端超时时间。
5. 检查Redis服务器是否出现阻塞,如AOF fsync阻塞、大量客户端连接排队等待等。
Pipeline功能及提升性能原因:
Pipeline功能允许客户端一次性发送多个命令并在服务器端依次执行,而无需等待每个命令的回复,最后一次性返回所有命令的执行结果。这样减少了网络往返次数,显著提高了Redis操作的吞吐量和效率。
本地Redis-client访问远程Redis服务出错的常见错误:
1. 网络问题,如主机名解析失败、网络不通等。
2. 认证失败,如密码错误或无权限访问。
3. 端口错误,Redis服务未在预期端口监听。
4. Redis服务器挂掉或未启动。
key-value大小超大或单key qps超高带来的影响:
1. 对Redis自身的影响:可能导致内存占用过大,影响Redis性能;单key的高qps可能引发热点问题,加大CPU压力,甚至影响其他key的读写速度。
2. 对其他客户端的影响:大量内存消耗可能导致Redis响应变慢,进而影响其他客户端的请求响应时间;高qps操作可能挤占带宽资源,影响其他客户端的通信质量。
Zabbix监控Redis的监控项:
1. 连接数(Connections)
2. 内存使用情况(Memory usage)
3. 主从复制延迟(Replication lag)
4. CPU使用率(CPU usage)
5. 响应时间(Response time)
6. 慢查询(Slow log)
7. 错误日志监控(Error logs)
RDB和AOF持久化区别:
1. RDB(Redis Database)持久化是周期性地将内存中的数据生成快照(snapshot)保存到磁盘,优点是恢复速度快,占用空间相对较小,缺点是在两次持久化间隔期间可能出现数据丢失。
2. AOF(Append Only File)持久化则是把每次写操作以命令形式追加到文件中,优点是数据完整性好,几乎不会丢失数据,缺点是文件大小增长较快,恢复速度相对较慢。
Docker拉取Redis实现数据持久化保存:
在Docker中,可以通过挂载宿主机目录至容器内部的Redis数据目录来实现持久化,例如在运行容器时加上 `-v /host/path:/data` 参数,其中 `/host/path` 是宿主机目录,`/data` 是Redis容器内数据存储目录。
Redis支持的数据类型:
String、List、Set、Sorted Set、Hash、Bitmaps、HyperLogLogs、Geospatial、Stream等。
Redis实现消息队列:
利用List数据结构,生产者使用LPUSH或RPUSH将消息放入队列,消费者使用BRPOP或BLPOP从队列中取出并消费消息。
常见的Redis集群架构及其优缺点对比:
1. 主从复制架构:一个主节点,多个从节点,主节点负责写入,从节点负责读取。优点是可以提高读性能和数据冗余备份,缺点是只有一个写入口,写性能受限且主节点故障恢复复杂。
2. Redis Sentinel(哨兵):通过哨兵监控主从集群,实现自动故障转移。优点是高可用性强,能够自动切换主节点,缺点是增加了系统的复杂度。
3. Redis Cluster:采用分布式架构,数据分片存储在多个节点上。优点是扩展性强,可水平扩展,缺点是需要处理数据分区的问题,客户端需兼容集群特性。
主从复制工作原理:
主节点将数据同步给从节点,从节点不断向主节点发送命令,请求最新的数据。当主节点执行写命令时,会将命令传播给从节点,从而保证主从数据一致性。
Redis如何实现高可用:
通过主从复制配合Sentinel(哨兵)机制,或者使用Redis Cluster自带的自动故障转移功能,都能实现在主节点故障时自动切换到从节点继续提供服务。
哨兵工作原理:
哨兵是一组运行在单独的Redis实例上的进程,它们持续监控主从集群的状态,当主节点发生故障时,哨兵之间通过投票选择新的主节点,并将这一变化通知给其他的从节点和客户端。
Redis集群的工作原理:
Redis集群采用数据分片(sharding)技术,将数据分散存储在多个节点上,每个节点只负责一定范围的槽(slot)。客户端在写入或读取数据时,会根据Key计算出槽位置,然后定位到对应的节点进行操作。
Redis集群如何避免脑裂:
Redis Cluster通过Quorum机制和Node majority投票策略来避免脑裂(split-brain)问题,只有获得大多数节点认可的主节点才能有效进行写操作,以此防止在网络分区情况下产生两个主节点的情况。
Redis集群最少几个节点:
Redis Cluster至少需要3个主节点,因为每个主节点至少需要一个从节点来达到多数派投票要求,所以至少需要6个节点(3主3从)。
Redis集群槽位数量:
Redis Cluster默认将键空间分为16384个槽位。
Redis集群中某个节点缺少一个槽位是否能使用:
不能完全使用,因为这意味着某些Key可能无法定位到正确的节点上进行操作。要确保所有槽位都有节点负责,集群才能正常工作。
Redis数据写入时的槽位分配:
客户端根据Key计算CRC16散列值,然后模以16384,得到的余数就是该Key所属的槽位编号,根据槽位编号确定数据写入哪个节点。
Redis数据存储方式:
Redis将数据存储在内存中,并可以根据配置选择不同的持久化方式(RDB或AOF)将内存中的数据定期或实时写入磁盘。
Redis集群的各槽位和总槽位之间的关系:
Redis集群将所有可能的Key映射到0至16383共16384个槽位上,每个槽位都可以被集群中的任何一个节点“拥有”。客户端根据Key计算出槽位号后,会找到拥有该槽位的节点进行数据操作。这种设计使得Redis集群能够将数据均匀地分布在多个节点上,实现水平扩展。
标签:面试题,redis,Redis,集群,内存,数据,节点,客户端
From: https://www.cnblogs.com/nwq1101/p/18161002