【百面成神】Redis基础11问,你能坚持到第几问

在这里插入图片描述

前 言
🍉 作者简介:半旧518,长跑型选手,立志坚持写10年博客,专注于java后端
☕专栏简介:纯手打总结面试题,自用备用
🌰 文章简介:Redis最基础、重要的11道面试题

文章目录

      • 1.redis的五种数据类型及其使用场景
      • 2.Redis在项目中是如何应用的
      • 3.缓存穿透、缓存击穿、缓存雪崩的区别和解决场景
      • 4.主从机制
      • 4.Redis的性能为什么很好
      • 6.Redis的持久化机制
      • 7.Redis为什么是单线程的?
      • 8.什么是哨兵机制
      • 9.redis的集群
      • 10.一致性哈希
      • 11.知道大key问题吗?

1.redis的五种数据类型及其使用场景

哈希(hash,键值对形式)
链表(list,元素有序可以重复)
集合(set,元素无序且不可重复,可以进行交、并、差运算)
有序集合(zset,元素有序的集合)
字符串(String,可以存储字符串、数字、二进制数等)

2.Redis在项目中是如何应用的

用它进行排序、排名、点赞数统计等

3.缓存穿透、缓存击穿、缓存雪崩的区别和解决场景

一般我们获取数据,会先访问缓存,如果缓存中存在则直接返回。如果缓存不存在则从数据库中获取,如果数据库中存在,会将获取的数据放入缓存、返回。如果数据库中也获取不到数据,就会直接返回失败。

在一些场景,如用户伪造不存在的数据进行查询,就需要每次都访问数据库。这时,缓存就不起作用了,因此我们称这种情况为缓存穿透。如果穿透了缓存,服务器请求数非常大,数据库可能因为扛不住压力挂掉。可以使用布隆过滤器(其底层是使用哈希算法的map缓存已经存在的数据)解决,但是可能因为哈希冲突导致误判,也可能存在数据更新问题。另外一种解决思路是缓存控制,即使某个用户id(key)的数据在数据库中找不到,也可以把id缓存到redis缓存中,这样该用户获取数据时就不会有缓存穿透问题。

在诸如秒杀活动的场景,同一时刻大量请求访问服务器,而此时缓存失效了,就会导致缓存击穿。缓存击穿的原因是同一时刻的访问量过大,因此可以通过加锁方式解决。也可以从缓存失效的角度出发,可以进行自动续期,防止缓存失效。

缓存雪崩是缓存击穿的plus版本,多个热门key都失效了。问题很严重,我们称为缓存雪崩。可以通过设置过期时间加随机数避免缓存在同一时间失效。另一个角度是从架构角度设计高可用的架构,比如如果使用的是redis做为缓存,可以使用哨兵模式(主机挂掉自动选举新主机)或者集群模式。也可以设置服务降级方案(如直接在配置中读默认数据)进行兜底。

区别:缓存穿透没数据、缓存击穿在缓存中没有数据,缓存雪崩是plus版本的缓存击穿

4.主从机制

将master上的数据及时有效的复制到slave上。一个master对应多个slave,但是一个slave只对应一个master。

主从复制的步骤是:建立连接、数据同步、命令传播(解决主机状态在同步过程中发生改变,主从状态不一致问题)。

在命令传播阶段,二者采用心跳机制保持连接确认。

主从复制可能出现的问题:
频繁的全量复制:因为主从复制过程中主机重启导致,可以记住主机runid解决。
从机数据不一致:可能是因为网络延迟导致,可以将主从部署在同一机房环境。

主从复制的好处有:(负载性能、数据安全、服务安全三个方面)
读写分离(主结点写,从结点读),提高负载能力。
数据冗余备份。
故障恢复(主机当掉有从机顶)
负载均衡
高可用的基石

4.Redis的性能为什么很好

Redis是纯内存的数据库,使用非阻塞式IO,全程使用hash数据结构,读取数据速度很快。

6.Redis的持久化机制

RDB:使用单独的线程进行数据IO,主线程不进行任何的IO,这种方式可以保证性能,但是可能会有数据丢失的情况
AOF:将数据持久化到特定的日志文件中,定时为1s持久化一次。其效率比RDB低。但是其安全性较高。
建议两者同时使用。如果可以容忍数分钟的数据丢失,可以使用RDB方式。

7.Redis为什么是单线程的?

程序清晰简单,不用考虑线程安全问题,但是可能会浪费多核cpu资源,可以同时开启多个redis服务器解决。

8.什么是哨兵机制

哨兵(集群:防止把网络的问题误判为主机的问题)用于监视主机的状态变化(发ping消息),当主机当掉,可以进行主从服务器的切换(由集群的leader执行),并通过「发布者/订阅者机制」通知给客户端,保证系统的高可用。

9.redis的集群

在特定场景下,如写并发,海量数据的存储压力,需要使用redis集群。Redis的集群采用分布式存储,每台服务器上存储不同的数据内容。其数据分布的策略是使用哈希槽来分配数据,默认一个cluster分配16384个槽,数据存储位置就是哈希值%16384。

10.一致性哈希

在海量数据的情形下,可能需要扩充服务器。常规的哈希算法需要重新计算所以服务实例的哈希值。一致性hash的出现解决了这种问题。将服务器结点构成一个环,每个结点分配一个token。在查找时先根据key计算哈希值,然后顺时针找到第一个大于等于该哈希值的token结点。这样删除、插入新结点只影响相邻的两个结点,缺点是插入、删除结点可能导致数据命中问题。

11.知道大key问题吗?

所谓大key问题,就是key对应的value值较大。如某个热门课程的收藏用户可能是一个很庞大的list。因为redis的主线程是单线程机制,因此大key问题会导致线程阻塞,并发量下降,客户端超时等。产生大key的原因可能有:一直往value里塞数据,但没有删除机制;没有做数据分片,将大key转换为小key。

可以使用big-keys命令或可视化工具找到大key。

解决大key问题可以通过:对于可删除的情况,删除非热点大key;压缩(string)和拆分key(list和set)。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI 未来已至,向量数据库站在新的节点上

“AI 的 iPhone 时刻已经到来。” 在刚刚结束的 NVIDIA GTC Keynote 中,这句话被 NVIDIA CEO 黄仁勋反复提及,长达 1 个多小时的分享中,生成式 AI 相关的内容占据了绝大部分比重。他表示,生成式 AI 的火热能力为企业带来了挑战&a…

2022/3/22 从CV方向角度 —快速解读Nvidia 2023GTC

GTC分享内容和个人看法 3月21号11点,Nvidia开启了GTC主题演讲,这些年英伟达加速库的发展和对AI的投入应用,不难看出掌握GPU加速计算技术的N家肯定是宣扬AI方向的产品和生产工具,下面我将简要汇总下演讲的内容,和从我自…

Java语言-----类与对象的秘密

目录 前言 一、类与对象的介绍 二、类的实例化 三.类与对象的使用方法 3.1对象的初始化 3.2内存显示图 四.this的使用方法 总结 😽个人主页: tq02的博客_CSDN博客-C语言,Java领域博主 🌈理想目标:努力学习,向Java进…

修改linux网卡配置文件的文件名

修改linux网卡配置文件的文件名 查看自己系统中网卡配置文件的文件名 #查看网卡的配置文件名,已经网络的状态 ip a查看系统是否可以使用ifconfig命令 #输入命令 ifconfig #出现以下图片表示ifconfig的命令可用。可能出现的错误:ifconfig command no foun…

第十七天 JavaScript、Vue详细总结

目录 JavaScript、Vue 1. JavaScript常用对象 1.1 Array对象 1.2 String对象 1.3 自定义对象 1.4 JSON 1.5 BOM 1.6 DOM 2. 事件监听 2.1 事件绑定 2.2 常见事件 2.3 案例 3. Vue 3.1 概述 3.2 快速入门 3.3 常用指令 3.4 生命周期 JavaScript、Vue 今日目标&…

为什么说网络安全是风口行业?是IT行业最后的红利?

前言 “没有网络安全就没有国家安全”。当前,网络安全已被提升到国家战略的高度,成为影响国家安全、社会稳定至关重要的因素之一。 网络安全行业特点 1、就业薪资非常高,涨薪快 2021年猎聘网发布网络安全行业就业薪资行业最高人均33.77万&…

2023年2月用户体验GX评测:国有行及股份行持续领跑,农商行农信社积极探索用户体验提升

易观:2023年2月易观千帆用户体验GX评测显示,国有行及股份制银行继续领跑手机银行用户体验,平安口袋银行、中国工商银行、招商银行稳居AAAAA级;城商行、农商行、农信社重视用户体验,银行下一步重点依然是狠抓用户体验建…

【java基础】Stream流的各种操作

文章目录基本介绍流的创建流的各种常见操作forEach方法filter方法map方法peek方法flatMap方法limit和skip方法distinct方法sorted方法收集结果收集为数组(toArray)收集为集合(collect)收集为Map关于流的一些说明(终结操…

WEB网站服务(一)

1.1 Apache网站服务基础1.1.1Apache简介Apache HTTP Server是开源软件项目的杰出代表,基于标准的HTTP网络协议提供网页浏览服务。Apache服务器可以运行在Linux,UNIX,windows等多种操作系统平台中。1.Apache的起源1995年,Apache服务程序的1.0版…

Linux- 系统随你玩之--玩出花活的命令浏览器-双生姐妹花

文章目录1、背景2、命令浏览器-双生姐妹花2.1、姐妹花简介2.2 、验名正身2.3、常用功能选项3、常用实操3.1、发送请求获取文件3.1.1、抓取页面内容到一个文件中3.1.2、多个文件下载3.1.3、下载ftp文件3.1.4、断点续传3.1.5、上传文件3.1.6、内容输出3.2 、利用curl测试接口3.3 …

毕业设计 基于51单片机自动智能浇花系统设计

基于51单片机自动智能浇花系统设计1、毕业设计选题原则说明(重点)2、项目资料2.1 系统框架2.2 系统功能3、部分电路设计3.1 STC89C52单片机最小系统电路设计3.2 按键电路设计3.3 水泵控制电路设计4、部分代码展示4.1 数码管位选程序4.2 ad0832数据读取程…

HTTPS协议,看这篇就够了

不安全的HTTP 近些年来,越来越多的网站使用 HTTPS 协议进行数据传输,原因在于 HTTPS 相较于 HTTP 能够提供更加安全的服务。 很多浏览器对于使用 HTTP 协议的网站会加上『警告』的标志表示数据传输不安全,而对于使用 HTTPS 协议的网站会加上…

C++11智能指针

目录 一、智能指针的初步认识 1.1 使用场景 1.2 原理 二、std::auto_ptr 2.1 管理权转移 2.2 auto_ptr的模拟实现 三、std::unique_ptr 四、std::shared_ptr 4.1 基础设计 4.2 线程安全问题 4.3 定制删除器 五、std::weak_ptr 六、C11与Boost中智能指针的关系 一、…

脱不下孔乙己的长衫,现代的年轻人该怎么办?

“如果我没读过书,我还可以做别的工作,可我偏偏读过书” “学历本该是我的敲门砖,却成了我脱不下的长衫。” 最近,“脱下孔乙己的长衫”在网上火了。在鲁迅的原著小说中,孔乙己属于知识阶级(长衫客&#xf…

网络安全工具大合集

还是一句话,功夫再高,也怕菜刀首先,恭喜你发现了宝藏。本文章集成了全网优秀的开源攻防武器项目,包含:信息收集工具(自动化利用工具、资产发现工具、目录扫描工具、子域名收集工具、指纹识别工具、端口扫描…

Json数据传递参数

文章目录Json数据传递参数集合参数:Json格式POJO参数:json格式集合参数:json格式RequestBody与RequestParam的区别时间参数的转换Json数据传递参数 第一步 在pom文件中添加相关配置第二步 作用时开启json数据转换成对象postman发送json数据…

CSS 实现六边形柱状图

前言 👏CSS 实现六边形柱状图 速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义全局css变量,柱状宽度为–w,最大高度为–h,柱形整体为渐变色,定义上部分颜色为…

【STL三】序列容器——array容器

【STL三】序列容器——array一、array简介二、头文件三、模板类四、成员函数1、迭代器2、元素访问3、容量4、操作五、demo1、容量(不使用迭代器)2、使用迭代器3、元素访问 at()、front()、back()、data()一、array简介 array 容器是 C 11 标准中新增的序…

ChatGPT能否取代程序员?

目录ChatGPT能否取代程序员?ChatGPT和程序员的工作内容和工作方式ChatGPT和程序员的共同点程序员的优势程序员的实力ChatGPT和程序员的关系结论惊喜ChatGPT能否取代程序员? ChatGPT是一种非常普遍的人工智能(AI)系统,…

基于springboot家政服务管理系统(程序+数据库+文档)

大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…