Redis 经典问题处理-常见面试题

Redis 经典问题处理-常见面试题

Redis 连接数问题

Redis 服务器连接不上,应用程序无法获取连接。可能是以下的原因,以及对应解决的方案

1、最大连接数

原因
Redis 服务器默认设置的最大连接数 maxclients 是 10000,但是这个受服务器最大文件数影响,服务器默认最大文件数是 1024,所以 redis 最大连接数为 1024-32=992

解决方案

  1. 首先查看当前连接数
     ./redis-cli –h host –p port info clients
    
  2. 查看最大连接数
     ./redis-cli –h host –p port config get maxclients
    
  3. 如果连接数远远小于最大连接数,就是服务器最大文件数的影响,修改对应的文件
     # 修改 /etc/security/limits.conf,添加下面内容
     *   soft    nofile    65536
     *   hard    nofile    65536
     # 重启服务生效后,使用 ulimit -a 查看
    

2、大量的长连接导致

原因
监控平台查看到 redis 客户端连接数过大,超过最大限制 1W
通过下面命令分析具体的连接信息

./redis-cli –h host –p port client list

如果存在大量的空闲连接,主节点 cmd=null,从节点 cmd=readonly,并且 idle 空闲时长太长,导致连接池维持了太多的连接。

默认情况下,如果客户端空闲了很多秒,Redis 的最新版本不会关闭与客户端的连接:连接将永远保持打开状态。

解决方案

  1. 设置 timeout
     ./redis-cli –h host –p port CONFIG SET timeout 30
    
  2. 设置 tcp-keepalive
     # 用来定时向client发送tcp_ack包来探测client是否存活的
     ./redis-cli –h host –p port config set tcp-keepalive 300
    
  3. 应用程序配置自动释放连接

Redis CPU 问题

Redis 官方文档 reids面试题 有这么一句话:CPU 基本不可能成为的 Redis 的瓶颈,通常 Redis 受限于内存或网络

然而在实际生产环境中,还是会遇到 redis cpu 占用过高的场景

1、高消耗命令导致 CPU 使用率过高

原因
高消耗命令 (慢查询 或 value 值过大) :即时间复杂度为 O(N) 或更高的命令。通常情况下,命令的时间复杂度越高,在执行时会消耗较多的资源,从而导致 CPU 使用率上升

这是因为 Redis 是用 “单线程-多路复用io模型” 来实现高性能的内存数据服务的,这种机制避免了使用锁,但是同时这种机制在进行 sunion 之类的比较耗时的命令时会使 redis 的并发下降。因为单线程,所以耗时的命令会导致并发下降,读写并发都会下降,从而导致 CPU 使用率上升

解决方案

  1. 评估并禁用高风险命令和高消耗命令
  2. 优化业务程序,避免频繁执行数据排序操作
  3. 调整 redis 架构为读写分离架构,对高消耗命令或应用进行分流

2、连接数过多导致 CPU 使用率过高

参考前面的 Redis 连接数问题

3、数据持久化 AOF

原因
Redis 提供两种持久化方式:RDB (默认) 和 AOF (阿里云默认)

RDB 是 Redis 默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为 dump.rdb。通过配置文件中的 save 参数来定义快照的周期

AOF 持久化(即 Append Only File 持久化),则是将 Redis 执行的每次写命令记录到单独的日志文件中,当重启 Redis 会重新将持久化的日志中文件恢复数据

Redis

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Redis常见面试题包括但不限于以下几个方面: 1. Redis的特点和优势:Redis是一个基于内存的NoSQL数据库,支持多种数据结构和丰富的操作,具有高性能、高并发、持久化、主从同步等特点。 2. Redis的数据结构:Redis支持多种数据结构,包括字符串(string)、列表(list)、集合(set)、有序集合(sorted set)和哈希(hash),每种数据结构都有相应的操作方法。 3. Redis的持久化方式:Redis有两种持久化方式,分别是RDB(Redis Database)和AOF(Append Only File)。RDB是将内存中的数据定期保存到磁盘上,而AOF是将每个写操作追加到文件末尾。 4. Redis的使用场景:Redis可以用于缓存、会话管理、计数器、排行榜、消息队列等多种场景。它的高性能和丰富的数据结构使得它在处理大量并发请求和快速读写的场景下表现出色。 5. Redis的并发访问:Redis采用单进程单线程模式,通过队列模式将并发访问变为串行访问。在Jedis客户端对Redis进行并发访问时可能会出现连接超时、数据转换错误、阻塞等问题,需要注意处理这些并发访问的情况。 综上所述,Redis是一个功能强大的基于内存的NoSQL数据库,具有多种数据结构和丰富的操作方法,适用于多种场景。在面试中,了解Redis的特点、数据结构、持久化方式、使用场景和并发访问等方面的知识是非常重要的。 #### 引用[.reference_title] - *1* *2* [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^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [精选 21道 Redis 最常问面试题!收藏一波 !](https://blog.csdn.net/w915209092/article/details/126035419)[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^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值