Redis面试真题总结(二)

news2024/9/21 21:04:16

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

文章收录在网站:http://hardyfish.top/

在这里插入图片描述

Redis常见的数据类型有哪些?

string 字符串

  • 字符串类型是 Redis 最基础的数据结构,首先键是字符串类型,而且其他几种结构都是在字符串类型基础上构建的。

  • 字符串类型实际上可以是字符串:

    • 简单的字符串、XML、JSON
    • 数字:整数、浮点数
    • 二进制:图片、音频、视频。
  • 使用场景:

    • 缓存、计数器、共享 Session、限速。

Hash(哈希)

  • 在 Redis中哈希类型是指键本身是一种键值对结构

    • value={{field1,value1},……{fieldN,valueN}}
  • 使用场景:

  • 哈希结构相对于字符串序列化缓存信息更加直观,并且在更新操作上更加便捷。

    • 所以常常用于用户信息等管理,但是哈希类型和关系型数据库有所不同,哈希类型是稀疏的
      • 而关系型数据库是完全结构化的,关系型数据库可以做复杂的关系查询
        • 而 Redis 去模拟关系型复杂查询开发困难且维护成本高。

List(列表)

  • 列表类型是用来储存多个有序的字符串,列表中的每个字符串成为元素,一个列表最多可以储存 2^32–1 个元素

  • 在 Redis 中,可以队列表两端插入和弹出,还可以获取指定范围的元素列表、获取指定索引下的元素等

    • 列表是一种比较灵活的数据结构,它可以充当栈和队列的角色。
  • 使用场景:

    • Redis 的 lpush+brpop 命令组合即可实现阻塞队列,生产者客户端是用 lpush 从列表左侧插入元素
      • 多个消费者客户端使用 brpop 命令阻塞式的列表尾部的元素
        • 多个客户端保证了消费的负载均衡和高可用性。

ZSet的底层是如何实现的?

Redis的有序集合(Zset)是一种既可以看作是Set,又可以看作是Hash的数据结构

  • 其底层实现主要使用了哈希表和跳跃表。

哈希表:

  • 在Redis的Zset中,每个元素是唯一的,同时与每个元素关联的还有一个分数(Score)。
  • 元素的唯一性保证可以由哈希表来实现。
    • 即Redis的Zset将元素作为哈希表的键,将对应的分数作为哈希表的值。

跳跃表:

  • Redis的Zset还需要依据分数来对元素进行排序,这个特性是通过跳跃表来实现的。
    • 跳跃表是一种可以进行快速查找的数据结构。
    • 由于跳跃表的特性,对于分数的查找、插入、删除都具有较好的时间复杂度。

Zset的基本形状就是:

  • 哈希表确保了成员的唯一性和查找的速度,跳跃表确保了有序性以及区间查找。

什么是跳跃表?

跳跃表(Skip List)是一种可以替代平衡树的数据结构。

在它的简单形式中,跳跃表和链表是一致的,只不过在跳跃表中

  • 链表的每个节点可能有多个指向其后继的指针,这样可以实现快速查找等操作。

跳跃表最主要的特点是它的查找,插入,删除操作的时间复杂度都是O(logn)

基本思想:

假设我们有一个有序链表,我们想要查找一个元素,需要从头开始,一步一步的查找

  • 这种情况下查找的时间复杂度是O(n)

现在,我们对链表做一些增强,我们抽取出部分数据在上一级创建一个新的链表,上级链表的元素个数是下级链表的1/2

  • 同理,我们再在上级链表的基础上抽取出数据在更高级别创建链表,这样就构成了多级索引。
level3:  ---------------63
level2:  ----31---------63
level1:  ----31----47---63
level0:  15--31--47--63

如上,我们有一个包含4个元素{15,31,47,63}的链表

  • 我们在这个链表的基础上创建了三个更高级别的链表,最高级别的链表只包含一个元素。
  • 这样构成的数据结构就是跳跃表。

现在,如果我们想要查找47,我们可以从最高级别的链表开始,63>47

  • 所以我们到第二级别的链表查找,31<47,再向右走,到达63,63>47
  • 所以我们进入下一级链表,47就在这里。在跳跃表中,47这样的查找就是logn的复杂度。

跳跃表不仅能提供较快的查找速度,而且插入和删除元素也相对简单,主要是调整索引,改变指针的指向即可。

因此,跳跃表在很多场景下,例如Redis的Sorted Set,都有被广泛应用。

什么是缓存穿透?怎么解决?

缓存穿透是指在使用缓存系统时,恶意请求或者不存在的数据频繁地被发送到缓存中,导致缓存无法命中

  • 最终请求会直接落到后端数据库,造成数据库压力过大。

缓存穿透可能出现的原因包括:

恶意攻击:

  • 攻击者有意发送不存在的数据请求,试图使缓存失效,以达到影响系统性能或者触发系统错误的目的。

随机查询:

  • 大量并发的随机查询请求,其中大部分请求的数据都不存在于缓存中。

存在但很少访问的数据:

  • 一些数据很少被访问,经常被请求但却不存在于缓存中,导致缓存穿透。

为了解决缓存穿透问题,可以采取以下措施:

布隆过滤器(Bloom Filter):

  • 布隆过滤器是一种高效的数据结构,用于判断某个元素是否存在于集合中。

  • 在请求到来时,先使用布隆过滤器进行判断,如果被拦截则不再继续访问缓存和数据库,减轻了数据库的压力。

缓存空对象(Cache Null Object):

  • 当某个请求查询的数据不存在时,将空对象或者null放入缓存,以防止相同的请求频繁查询数据库。
  • 在一定时间内,如果有相同的请求再次到来,则直接从缓存中获取到空对象,避免了对数据库的重复查询。

数据预热(Cache Pre-warming):

  • 在系统启动时,将一些常用或重要的数据预先加载到缓存中
  • 提前热身缓存,避免了对这部分数据的缓存穿透问题。

异步加载(Asynchronous Loading):

  • 对于即将过期的缓存数据,可以在后台异步地进行数据加载和缓存的更新,避免了数据过期期间的缓存穿透。

限流和防护机制:

  • 通过对请求进行限流、IP白名单校验和请求验证等手段,防止恶意攻击和异常流量对缓存系统造成压力。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mobile net V系列详解 理论+实战(3)

Mobilenet 系列 论文精讲部分0.摘要1. 引文2. 引文3. 基础概念的讨论3.1 深度可分离卷积3.2 线性瓶颈3.3 个人理解 4. 模型架构细节5. 实验细节6. 实验讨论7. 总结 论文精讲部分 鉴于上一小节中采用的代码是V2的模型&#xff0c;因此本章节现对V2模型论文讲解&#xff0c;便于…

【C++二叉树】二叉树的前序遍历、中序遍历、后序遍历递归与非递归实现

1.二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 前序遍历方式&#xff1a;根-左子树-右子树。 递归实现&#xff1a; 要传一个子函数来实先递归&#xff0c;原因是原函数返回值为vector&#xff0c;在原函数迭代&#xff0c;返回值就难…

基于python上门维修预约服务数据分析系统

目录 技术栈和环境说明解决的思路具体实现截图python语言框架介绍技术路线性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示操作可行性详细视频演示源码获取 技术栈和环境说明 结合用户的使用需求&#xff0c;本系统采用运用较为广…

一、机器学习算法与实践_03概率论与贝叶斯算法笔记

1、概率论基础知识介绍 人工智能项目本质上是一个统计学项目&#xff0c;是通过对 样本 的分析&#xff0c;来评估/估计 总体 的情况&#xff0c;与数学知识相关联 高等数学 ——> 模型优化 概率论与数理统计 ——> 建模思想 线性代数 ——> 高性能计算 在机器学…

Qt窗口——对话框

文章目录 对话框自定义对话框对话框分类消息对话框QMessageBox使用示例自定义按钮快速构造对话框 颜色对话框QColorDialog文件对话框QFileDialog字体对话框QFontDialog输入对话框QInputDialog 对话框 对话框可以理解成一个弹窗&#xff0c;用于短期任务或者简洁的用户交互 Qt…

AIoT智能工控板

在当今竞争激烈的商业环境中&#xff0c;企业需要强大的科技力量来助力腾飞&#xff0c;AIoT智能工控板就是这样的力量源泉。 其领先的芯片架构设计&#xff0c;使得主板的性能得到了极大的提升。无论是数据的处理速度、图形的渲染能力&#xff0c;还是多任务的并行处理能力&a…

【Linux笔记】虚拟机内Linux内容复制到宿主机的Window文件夹(文件)中

一、共享文件夹 I、Windows宿主机上创建一个文件夹 目录&#xff1a;D:\Centos_iso\shared_files II、在VMware中设置共享文件夹 1、打开VMware Workstation 2、选择需要设置的Linux虚拟机&#xff0c;点击“编辑虚拟机设置”。 3、在“选项”标签页中&#xff0c;选择“共…

【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析

2024年中国研究生数学建模竞赛 E题&#xff1a;高速公路应急车道紧急启用模型 问题分析 更新进展 【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 E题&#xff1a;高速公路应急车道紧急启用…

Remix在SPA模式下,出现ErrorBoundary错误页加载Ant Design组件报错,不能加载样式的问题

Remix是一个既能做服务端渲染&#xff0c;又能做单页应用的框架&#xff0c;如果想做单页应用&#xff0c;又想学服务端渲染&#xff0c;使用Remix可以降低学习成本。最近&#xff0c;在学习Remix的过程中&#xff0c;遇到了在SPA模式下与Ant Design整合的问题。 我用Remix官网…

简单多状态dp第三弹 leetcode -买卖股票的最佳时机问题

309. 买卖股票的最佳时机含冷冻期 买卖股票的最佳时机含冷冻期 分析: 使用动态规划解决 状态表示: 由于有「买入」「可交易」「冷冻期」三个状态&#xff0c;因此我们可以选择用三个数组&#xff0c;其中&#xff1a; ▪ dp[i][0] 表示&#xff1a;第 i 天结束后&#xff0c…

探索AI编程新时代:GitHub Copilot如何重塑开发者工作效率

在当今技术瞬息万变的时代&#xff0c;软件开发者们每天都在努力寻找更高效的编程方法。面对繁忙的工作日程和不断增加的项目压力&#xff0c;如何在编码过程中大幅提升效率成为了一个备受关注的话题。在众多工具中&#xff0c;GitHub Copilot以其强大的AI驱动能力脱颖而出&…

菜鸟也能轻松上手的Java环境配置方法

初学者学习Java这么编程语言&#xff0c;第一个难题往往是Java环境的配置&#xff0c;今天与大家详细地聊一聊&#xff0c;以便大家能独立完成配置方法和过程。 首先&#xff0c;找到“JDK”&#xff0c;点击“archive”&#xff1a; 向下滑&#xff0c;在“previous java rel…

HTTPS:构建安全通信的基石

HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;&#xff0c;作为互联网上安全通信的基石&#xff0c;通过在HTTP基础上引入SSL/TLS协议层&#xff0c;实现了数据传输的加密&#xff0c;确保了信息的机密性、完整性和真实性。这一过程涉及多个精细设计的步骤…

【EasyBlog】基于React+AntD+NextJS+NestJS+MySQL打造的开源博客系统

Github项目地址&#xff1a;https://github.com/fecommunity/easy-blog&#xff0c; 欢迎Star。 Easy-Blog Easy-Blog 是一套集成文章发表、页面创建、知识库管理、博客后台管理等功能于一体的博客系统。 首页-浅色主题 首页-暗黑主题 文章阅读 后台管理 ✨ 特性 &#…

公司网站改版时,需要注意哪些细节?

在公司网站改版时&#xff0c;需要注意的细节非常多&#xff0c;这些细节将直接影响到网站的用户体验、SEO效果以及整体品牌形象。以下是一些关键的注意事项&#xff1a; 明确改版目标&#xff1a; 在改版前&#xff0c;要明确改版的目标是什么&#xff0c;比如提升用户体验、增…

【AcWing】873. 欧拉函数

#include<iostream> using namespace std;int main(){int n;cin>>n;while(n--){int x;cin>>x;int resx;for(int i2;i<x/i;i){if(x%i0){//resres*(1-1/i);整数1/i等于0&#xff0c;算不对且会溢出//以下几种都能ac//resres/i*(i-1);i*(1-1/i)i-1&#xff0…

通过标签实现有序:优化你的 FastAPI 生成的 TypeScript 客户端

在软件开发的世界里&#xff0c;API 客户端代码的质量直接影响着应用程序的性能和可维护性。随着项目规模的扩大&#xff0c;自动化生成的代码往往变得臃肿且难以管理。但幸运的是&#xff0c;通过一系列的优化策略&#xff0c;我们可以显著提升这些代码的优雅与效能。在本文中…

计算机网络(八) —— Udp协议

目录 一&#xff0c;再谈端口号 1.1 端口号 1.2 netsta命令 二&#xff0c;UDP协议 2.1 关于UDP 2.2 Udp协议格式 2.3 Udp协议特点 2.4 Udp的缓冲区 一&#xff0c;再谈端口号 http协议本质是“请求 - 响应”形式的协议&#xff0c;但是应用层需要先将数据交给传输层&…

2024/9/21 408 20题

a b 58-130-180-199-42-15&#xff1a;c d a 184-182-187-176-19941 c d a a c b d c a c b c c c

12V转100V低压升高压DC/DC电源GRB12-100D-100mA-Uz(0-3V)

特点 ● 效率高达75%以上 ● 1*2英寸标准封装 ● 单电压输出 ● 超高性价比 ● 电压控制输出,输出电压随控制电压的变化而线性变压 ● 工作温度: -40℃~75℃ ● 阻燃封装&#xff0c;满足UL94-V0 要求 ● 温度特性好 ● 可直接焊在PCB 上 应用 GRB 系列模块电源是一…