Redis面试宝典【刷题系列】

文章目录

      • 一、什么是Redis?
      • 二、Redis相比Memcached有哪些优势?
      • 三、Redis支持的数据类型有哪些?
      • 四、Redis的主要消耗的物理资源是什么?
      • 五、Redis的全称是什么?
      • 六、Redis有哪些数据淘汰策略?
      • 七、为什么Redis需要把所有数据放到内存中?
      • 八、Redis集群方案有哪些?
      • 九、Redis集群方案什么情况下会导致整个集群不可用?
      • 十、一个字符串类型的值能存储最大容量是多少?
      • 十一、Redis官方为什么不提供Windows版本?
      • 十二、Redis有哪些适合的场景?
      • 十三、Redis支持的Java客户端都有哪些?官方推荐用哪个?
      • 十四、Jedis与Redisson对比有什么优缺点?
      • 十五、Redis如何设置密码及验证密码?
      • 十六、说说Redis哈希槽的概念?
      • 十七、Redis集群的主从复制模型是怎样的?
      • 十八、Redis集群会有写操作丢失吗?为什么?
      • 十九、Redis事务相关的命令有哪些几个?
      • 二十、Redis key的过期时间和永久有效分别怎么设置?
      • 二十一、Redis如何做内存优化?
      • 二十二、Redis回收进程如何工作的?
      • 二十三、Redis常见的性能问题有哪些?如何解决?
      • 二十四、Memcache与Redis的区别都有哪些?
      • 二十五、Redis的持久化是什么?
      • 二十六、RDB的优缺点?
      • 二十七、AOF的优缺点?
      • 三十、简单说说缓存雪崩及解决方法
      • 三十一、缓存穿透怎么导致的?
      • 三十二、遇到缓存一致性问题,你怎么解决的?
      • 三十三、为什么要用 Redis 而不使用 map/guava 做缓存?
      • 三十四、Redis持久化数据和缓存怎么做扩容?
      • 三十五、Redis的内存淘汰策略有哪些?
      • 三十六、简单描述下Redis线程模型
      • 三十七、Redis事务其他实现方式?
      • 三十八、生产环境中的 redis 是怎么部署的?
      • 三十九、如何解决 Redis 的并发竞争 Key 问题?
      • 四十、什么是 RedLock?
      • 四十一、什么时候需要缓存降级?


在这里插入图片描述

一、什么是Redis?

解答:

Redis是一个高性能的 Key-Value 内存数据库,支持多种数据类型如 StringListSetSorted SetHash。它通过将数据存储在内存中来实现快速读写,并通过异步方式将数据持久化到硬盘。Redis 的优势在于其出色的性能和丰富的数据结构支持,但也存在物理内存容量限制的问题。

二、Redis相比Memcached有哪些优势?

解答:
Redis 相比 Memcached 具有以下优势:

  • 支持更丰富的数据类型。
  • 读写速度更快。
  • 提供数据持久化功能。

三、Redis支持的数据类型有哪些?

解答:
Redis 支持的数据类型包括:

  • String(字符串)
  • List(列表)
  • Set(集合)
  • Sorted Set(有序集合)
  • Hash(哈希)

四、Redis的主要消耗的物理资源是什么?

解答:
Redis 主要消耗的物理资源是内存。

五、Redis的全称是什么?

解答:
Redis 的全称是 Remote Dictionary Server

六、Redis有哪些数据淘汰策略?

解答:
Redis 的数据淘汰策略包括:

  • noeviction:达到内存限制时返回错误。
  • volatile-lru:删除最近最少使用的设置了过期时间的 key
  • allkeys-lru:删除所有最近最少使用的 key
  • volatile-lfu:删除使用频率最低的设置了过期时间的 key
  • allkeys-lfu:删除所有使用频率最低的 key
  • volatile-random:随机删除设置了过期时间的 key
  • allkeys-random:随机删除所有 key
  • volatile-ttl:根据过期时间淘汰 key

七、为什么Redis需要把所有数据放到内存中?

解答:
Redis 需要把所有数据放到内存中是为了达到最快的读写速度。如果不将数据放在内存中,磁盘 I/O 速度会严重影响 Redis 的性能。

八、Redis集群方案有哪些?

解答:
Redis 集群方案包括:

  • Codis,支持节点数量改变时数据可恢复。
  • Redis Cluster,使用 hash 槽的概念进行数据分片。
    业务代码层实现,通过 keyhash 值分配到不同的 Redis 实例。

九、Redis集群方案什么情况下会导致整个集群不可用?

解答:
当集群中的节点失败,且该节点负责的 hash 槽没有有效的复制品时,可能导致整个集群不可用。

十、一个字符串类型的值能存储最大容量是多少?

解答:
一个字符串类型的值在 Redis 中能存储的最大容量是 512M

十一、Redis官方为什么不提供Windows版本?

解答:
因为 Linux 版本已经相当稳定,并且用户量很大,开发 Windows 版本可能会带来兼容性等问题。

十二、Redis有哪些适合的场景?

解答:
适合使用 Redis 的场景包括会话缓存、全页缓存、消息队列、排行榜/计数器和发布/订阅系统等。

十三、Redis支持的Java客户端都有哪些?官方推荐用哪个?

解答:
Redis 支持的 Java 客户端包括Jedis、Redisson、Lettuce等,官方推荐使用Redisson

十四、Jedis与Redisson对比有什么优缺点?

解答:
Jedis 是功能较为全面的 Redis 客户端,而 Redisson 提供了分布式和可扩展的Java 数据结构,但不支持字符串操作和一些 Redis 特性如排序、事务、管道等。

十五、Redis如何设置密码及验证密码?

解答:
设置密码使用命令 config set requirepass 密码,验证密码使用命令 auth 密码。

十六、说说Redis哈希槽的概念?

解答:
Redis 集群使用 16384 个哈希槽来分布数据,每个 key 通过 CRC16 校验后对16384 取模决定放置哪个槽。

十七、Redis集群的主从复制模型是怎样的?

解答:
Redis 集群使用主从复制模型来保证数据的高可用性,每个主节点都会有 N-1 个从节点复制其数据。

十八、Redis集群会有写操作丢失吗?为什么?

解答:
Redis 集群可能会在特定条件下丢失写操作,因为其复制机制是异步的,并不能保证数据的强一致性。

十九、Redis事务相关的命令有哪些几个?

解答:
Redis 事务相关的命令包括 MULTIEXECDISCARDWATCH

二十、Redis key的过期时间和永久有效分别怎么设置?

解答:
设置 key 的过期时间使用 EXPIRE 命令,永久有效可以通过设置过期时间为 0 来实现。

二十一、Redis如何做内存优化?

解答:
内存优化可以通过合理使用数据结构、设置合理的过期时间、使用内存淘汰策略等方法来实现。

二十二、Redis回收进程如何工作的?

解答:
Redis 的回收进程通过监控内存使用情况,并在内存达到配置的限制时,根据设定的淘汰策略进行数据回收。

二十三、Redis常见的性能问题有哪些?如何解决?

解答:
Redis 的常见性能问题包括内存不足、主从复制延迟、持久化操作阻塞等。解决方法包括优化数据结构、使用更高效的淘汰策略、合理配置持久化策略等。

二十四、Memcache与Redis的区别都有哪些?

解答:
MemcacheRedis 的区别包括数据存储方式、支持的数据类型、持久化能力、数据容量限制和底层实现等方面。

二十五、Redis的持久化是什么?

解答:
Redis 的持久化机制包括 RDB(快照)和 AOF(追加文件)两种方式,用于数据的备份和灾难恢复。

二十六、RDB的优缺点?

解答:
RDB 的优点包括文件紧凑、适合备份和灾难恢复、最大化 Redis 性能、恢复速度快。缺点是可能会丢失数据,保存过程可能会阻塞主线程。

二十七、AOF的优缺点?

解答:
AOF 的优点是持久性更好,可以设置不同的 fsync 策略来平衡性能和数据安全性。缺点是文件体积可能较大,写入速度可能慢于 RDB,且存在潜在的 bug

三十、简单说说缓存雪崩及解决方法

解答:
缓存雪崩是指大量缓存同时过期,导致数据库压力剧增。解决方法包括设置不同的过期时间、使用互斥锁或队列控制并发请求等。

三十一、缓存穿透怎么导致的?

解答:
缓存穿透通常是由于查询不存在的数据项,导致请求直接访问数据库。解决方法包括缓存空值、使用布隆过滤器等。

三十二、遇到缓存一致性问题,你怎么解决的?

解答:
解决缓存一致性问题可以采用延时双删策略、利用消息队列和数据库的 binlog 日志同步等方法。

三十三、为什么要用 Redis 而不使用 map/guava 做缓存?

解答:
使用 Redis 作为缓存而不是map/guava的原因在于Redis提供了分布式缓存的能力,支持数据持久化,且具有更高的性能和扩展性。

三十四、Redis持久化数据和缓存怎么做扩容?

解答:
Redis 扩容可以通过使用一致性哈希实现动态扩容缩容,或者在持久化存储情况下使用固定的 keys-to-nodes 映射关系。

三十五、Redis的内存淘汰策略有哪些?

解答:
Redis 的内存淘汰策略包括noeviction、allkeys-lru、allkeys-random、volatile-lru、volatile-random 和 volatile-ttl等。

三十六、简单描述下Redis线程模型

解答:
Redis 是基于 Reactor 模式的单线程模型,使用文件事件处理器来处理网络事件,通过 I/O 多路复用技术来监听多个套接字。

三十七、Redis事务其他实现方式?

解答:
除了 MULTI/EXEC 事务,Redis 事务还可以通过 Lua 脚本保证命令的原子性执行,或使用中间标记变量来实现事务。

三十八、生产环境中的 redis 是怎么部署的?

解答:
生产环境中的 Redis 部署可能包括使用多台机器部署主从实例、配置足够的内存和 CPU 资源、实施故障转移和自动故障恢复机制等。

三十九、如何解决 Redis 的并发竞争 Key 问题?

解答:
解决 Redis 并发竞争 Key 问题可以采用分布式锁,如基于 ZookeeperRedis 实现的 Redlock 算法。

四十、什么是 RedLock?

解答:
RedLockRedis 官方提出的基于 Redis 实现分布式锁的算法,提供了互斥访问、避免死锁和高容错性的特性。

四十一、什么时候需要缓存降级?

解答:
当访问量剧增或服务出现问题时,为了保证核心服务可用,即使是有损服务,也需要进行缓存降级。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22843.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app集成sqlite

Sqlite SQLite 是一种轻量级的关系型数据库管理系统(RDBMS),广泛应用于各种应用程序中,特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置,所有数据都存储在一个单一的普通磁盘文件中&am…

pytest-html

首先安装pytest-html库 #执行命令 pytest --htmlreport.html ./pytest-html.pyimport pytest import logging def test_pass():"""用例通过"""assert Truedef test_fail():"""用例失败"""assert Falsedef test_e…

kafka为什么这么快?

前言 Kafka的高效有几个关键点,首先是顺序读写。磁盘的顺序访问速度其实很快,甚至比内存的随机访问还要快。Kafka在设计上利用了这一点,将消息顺序写入日志文件,这样减少了磁盘寻道的时间,提高了吞吐量。与传统数据库的…

从DeepSeek的爆火来看大模型微调技术的发展方向

“深度人工智能”是成都深度智谷科技旗下的人工智能教育机构订阅号,主要分享人工智能的基础知识、技术发展、学习经验等。此外,订阅号还为大家提供了人工智能的培训学习服务和人工智能证书的报考服务,欢迎大家前来咨询,实现自己的…

Dify使用教程(创建应用)

Dify的安装部署我已经写过了,简单的模型配置我也在前面进行了讲解,今天我们主要来讲讲如何使用Dify。 一、创建应用 我们可以通过三种方式在Dify的工作室内创建应用 01 基于应用模板创建(新手推荐)02 创建一个空白应用03 通过D…

system verilog的流操作符

流操作符&#xff0c;有分为操作对象是一整个数组和单独的数据两种&#xff0c;例如bit [7:0] a[4]和bit [31:0] b&#xff0c;前者操作对象是数组&#xff0c;后者是单独一个较大位宽的数。 流操作符有<<和>>&#xff0c;代表从右向左打包和从左向右打包。 打包的…

项目实战--网页五子棋(匹配模块)(4)

上期我们完成了游戏大厅的前端部分内容&#xff0c;今天我们实现后端部分内容 1. 维护在线用户 在用户登录成功后&#xff0c;我们可以维护好用户的websocket会话&#xff0c;把用户表示为在线状态&#xff0c;方便获取到用户的websocket会话 package org.ting.j20250110_g…

hot100_108. 将有序数组转换为二叉搜索树

hot100_108. 将有序数组转换为二叉搜索树 思路 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#…

Win11更新系统c盘爆满处理

1.打开磁盘管理 2.右击c盘选择属性&#xff0c;进行磁盘管理&#xff0c;选择详细信息。 3.选择以前安装的文件删除即可释放c盘空间。

深入理解 JSP 与 Servlet:原理、交互及实战应用

一、引言 在 Java Web 开发领域,JSP(JavaServer Pages)和 Servlet 是两个至关重要的技术,它们共同构成了动态网页开发的基础。Servlet 作为服务器端的 Java 程序,负责处理客户端请求并生成响应;而 JSP 则是一种简化的 Servlet 开发方式,允许开发者在 HTML 页面中嵌入 J…

[通俗易懂C++]:指针和const

之前的文章有说过,使用指针我们可以改变指针指向的内容(通过给指针赋一个新的地址)或者改变被保存地址的值(通过给解引用指针赋一个新值): int main() {int x { 5 }; // 创建一个整数变量 x&#xff0c;初始值为 5int* ptr { &x }; // 创建一个指针 ptr&#xff0c;指向 …

DL/CV领域常见指标术语(FLOPS/mIoU/混淆矩阵/F1-measure)------一篇入门

1. FLOPS、FLOPs和GFLOPs FLOPS: floating-point operations per second&#xff0c;每秒浮点运算次数&#xff0c;用来衡量硬件性能。 FLOPs&#xff1a;floating point of operations&#xff0c;是浮点运算次数&#xff0c;用来衡量算法、模型的复杂度。 GFLOPS&#xff…

被裁20240927 --- WSL-Ubuntu20.04安装cuda、cuDNN、tensorRT

cuda、cuDNN、tensorRT的使用场景 1. CUDA&#xff08;Compute Unified Device Architecture&#xff09; 作用&#xff1a; GPU 通用计算&#xff1a;CUDA 是 NVIDIA 的并行计算平台和编程模型&#xff0c;允许开发者直接利用 GPU 的并行计算能力&#xff0c;加速通用计算任…

DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?

DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f; 文章目录 DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f;一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT&#xff1a;谁更胜一筹&#xff1f;2.1 语言生成能力评测对比场景…

旧手机热点无法提供ipv6解决方法(emui 8 热点提供ipv6)

旧手机热点无法提供ipv6解决方法 手机&#xff1a;荣耀8x 系统版本: EMUI 8 网络&#xff1a;移动流量卡 解决方案 设置-》无线和网络-》移动网络-》接入点名称(APN)-》cmiot 修改 APN协议: IPv4/IPv6 修改 APN漫游协议: IPv4/IPv6

I2C学习笔记-软件模拟I2C

I2C学习笔记&#xff08;软件模拟&#xff09; 介绍GPIO的配置信号的展示起始信号 与 停止信号应答信号&#xff08;非应答信号&#xff09;检测应答信号发送一个字节数据接收一个字节数据 硬件配置实物测试 介绍 I2C的信号大概有 起始信号、应答信号、停止信号、写数据、读数…

VUE四:Vue-cli

什么是Vue-cli vue-cli是官方提供的一个脚手架,用于快速生成一个vue的项目模板; 预先定义好的目录结构及基础代码&#xff0c;就好比咱们在创建 Maven项目时可以选择创建一个骨架项目&#xff0c;这个骨架项目就是脚手架,我们的开发更加的快速; 什么是web pack 本质上&#…

基于 openEuler 构建 LVS-DR 群集

目录 对比 LVS 负载均衡群集的 NAT 模式和 DR 模式&#xff0c;比较其各自的优势 NAT 模式&#xff08;网络地址转换模式&#xff09; DR 模式&#xff08;直接路由模式&#xff09; 基于 openEuler 构建 LVS-DR 群集 实验准备环境 配置web服务器 web1 web2 首先下载ngi…

传统的自动化行业的触摸屏和上位机,PLC是否会被取代?

传统的自动化行业的触摸屏和上位机是否会被取代&#xff1f; 在工业自动化领域&#xff0c;触摸屏和上位机长期扮演着核心角色&#xff0c;尤其在污水处理、化工生产等场景中&#xff0c;它们通过实时数据采集、逻辑控制、报警联动等功能&#xff0c;保障了生产设备的稳定运行…

Spring Boot 集成MyBatis-Plus

文章目录 一、背景说明二、集成过程 2.1 引入 maven 依赖2.2 增加属性配置2.3 自动配置类 三、验证集成 3.1 控制器3.2 服务类3.3 Mapper接口类3.4 实体类3.4 不要忘记XML文件3.5 发起请求 四、技巧拓展 4.1 如何打印sql语句&#xff1f;4.2 如何对参数增加非空验证&#xff1f…