首页 > 数据库 >redis面试题

redis面试题

时间:2024-04-26 22:33:42浏览次数:28  
标签:面试题 redis Redis 集群 内存 数据 节点 客户端

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

相关文章

  • Redis的数据持久化机制
    Redis的数据持久化机制Redis是一个高性能的内存数据库,为了保证数据的安全性,它提供了两种数据持久化机制:RDB和AOF。RDB(RedisDataBase):RDB是一种快照式的持久化方式,它会在指定的时间间隔内将内存中的数据生成一个快照文件,保存到磁盘上。当Redis重启时,可以通过加载RDB文件来恢复数......
  • SSRF打redis主从(更了)
    翻下去看更新受不了了。打的题目是网鼎杯2020玄武组的SSRFMe。打了一天,都是在moduleload那里失败,开了vps也不行,难道是redis版本对不上? 话不多说,我直接上payload,实在受不了了。[[email protected]]#redis-serverredis.conf[root@EddieMurphyredis-rogue-s......
  • 面试题汇总——docker常用以及面试命令汇总
    Docker镜像使用当运行容器时,使用的镜像如果在本地中不存在,docker就会自动从docker镜像仓库中下载,默认是从 DockerHub 公共镜像源下载。下面我们来学习:1、管理和使用本地Docker主机镜像2、创建镜像 列出镜像列表我们可以使用 dockerimages 来列出本地主机上......
  • redis分布锁
     配置Redisson连接在SpringBoot项目的配置文件application.yml中添加Redisson配置:spring:data:redis:host:localhostport:6379database:0redisson:codec:org.redisson.codec.JsonJacksonCodecsingle-server-config:ad......
  • 一些面试题(前端)
    margin塌陷--解决方法:overflow:hidden6类css优先级:!important>行内样式(1000)>ID选择器(100)>类选择器(10)>标签选择器(1)>通用选择器(0)伪类:以冒号:作为前缀,给特定元素写样式,伪元素:以::作为前缀,可以创建dom树里没有的元素vue实现原理:发布者订阅者模式和数据劫持数据劫持:通过Object.defin......
  • springboot链接redis IPV6
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusions><exclusion>......
  • 面试题汇总——linux常见面试命令
    参考:https://blog.csdn.net/wangyuxiang946/article/details/133880048       firewalldfirewall-cmd常用命令 网址:https://www.cnblogs.com/klvchen/p/10063875.html#开启防火墙systemctlstartfirewalld.service#防火墙开机启动systemctlenable......
  • Java面试题:SimpleDateFormat是线程安全的吗?使用时应该注意什么?
    在日常开发中,我们经常会用到时间,我们有很多办法在Java代码中获取时间。但是不同的方法获取到的时间的格式都不尽相同,这时候就需要一种格式化工具,把时间显示成我们需要的格式。最常用的方法就是使用SimpleDateFormat类。这是一个看上去功能比较简单的类,但是,一旦使用不当也有可能导......
  • redis系列02---缓存过期、穿透、击穿、雪崩
    一、缓存过期问题产生的原由:内存空间有限,给缓存设置过期时间,但有些键值运气比较好,每次都没有被我的随机算法选中,每次都能幸免于难,这可不行,这些长时间过期的数据一直霸占着不少的内存空间!解决方案:redis提供8种策略供应用程序选择,用于我遇到内存不足时该如何决策:*noeviction:返......
  • Redis分布式锁
    Redis分布式锁如何实现?在Redis中提供了一个命令setnx(SETifnotexists)由于Redis的单线程的,用了命令之后,只能有一个客户端对某一个key设置值,在没有过期或删除key的时候是其他客户端是不能设置这个key的。如何控制Redis实现分布式锁有效时长呢?Redis的setnx指令不好控制这个......