数据库——redis常见面试题


title: 数据库——redis常见面试题
date: 2024-07-06 12:26:01
tags: 数据库
categories: 数据库
cover: /image/T2.jpg
description: Redis数据库常见面试题

redis

Redis是一个高性能的、基于内存的Key-Value数据库,支持多种数据结构,如字符串、哈希、列表、集合和有序集合。它提供快速读写能力,常用于缓存、消息队列、会话管理等场景。Redis支持持久化,保障数据不丢失,同时支持高可用性和可扩展性,通过主从复制和集群部署实现。尽管内存大小有限,但Redis的高性能和灵活性使其成为互联网应用中不可或缺的一部分。

redis与mysql

Redis是一个高速的内存数据库,适用于需要快速访问的场景;而MySQL是一个功能强大的关系型数据库,适用于需要复杂查询和事务处理的应用程序。

  1. 类型与存储

    • Redis:非关系型(NoSQL),主要基于内存存储,读写速度极快。
    • MySQL:关系型数据库(RDBMS),数据存储在磁盘上,支持复杂查询和事务处理。
  2. 数据持久化

    • Redis:提供RDB和AOF两种机制,将数据从内存保存到磁盘以防止数据丢失。
    • MySQL:通过其存储引擎(如InnoDB)的日志和事务机制来保证数据的持久性。
  3. 数据结构

    • Redis:支持多种数据结构,如字符串、哈希、列表、集合和有序集合。
    • MySQL:主要支持表结构,包含行和列,以及丰富的数据类型。
  4. 应用场景

    • Redis:常用于缓存、消息队列、实时数据分析等需要高速访问的场景。
    • MySQL:适用于需要复杂查询、事务处理和数据持久化的应用程序数据库。
  5. 性能

    • Redis:因为数据存储在内存中,所以性能极高,适合处理大量并发读写操作。
    • MySQL:虽然性能也很强,但受限于磁盘I/O,相对于Redis来说读写速度较慢。
Redis 和 MongoDB

MongoDB 和 Redis 都是 NoSQL,采用结构型数据存储,二者之间的主要区别如下所示:

  1. 性能

    • Redis:作为一个内存数据库,其性能非常高,特别是对于读写操作。它适用于需要高速缓存和实时数据处理的场景。
    • MongoDB:虽然性能也很强,但更侧重于处理大规模数据集和复杂查询。它通过索引、查询优化和分片等技术来提高性能。
  2. 数据结构与查询

    • Redis:支持多种数据结构,如字符串、哈希、列表、集合和有序集合,但查询语言相对简单。
    • MongoDB:使用类似于JSON的BSON格式存储数据,支持丰富的查询语言和索引,操作灵活且强大,最接近于关系数据库。
  3. 存储与内存管理

    • Redis:主要依赖内存存储数据,但提供了虚拟内存功能(尽管在现代版本中可能不再常用)以突破物理内存限制。
    • MongoDB:将数据存储在磁盘上,但会利用内存缓存热点数据。它依赖操作系统的内存管理机制。
  4. 数据持久化与恢复

    • Redis:通过RDB快照和AOF日志来确保数据的持久化,但AOF可能会影响访问性能。
    • MongoDB:采用oplog(操作日志)来支持复制和恢复操作,增强了数据的可靠性。
  5. 事务支持

    • Redis:支持简单的事务,通过MULTI、EXEC等命令保证一系列命令的原子性执行。
    • MongoDB:从4.0版本开始支持多文档事务,能够在单个复制集的多个集合中保证数据的一致性。
  6. 数据分析

    • Redis:本身不支持数据分析功能,但可以与其他数据分析工具集成。
    • MongoDB:内置MapReduce框架,支持在数据库内部执行大规模数据分析。
  7. 应用场景

    • Redis:适用于需要高速缓存、实时数据处理、消息队列等场景,适合处理较小到中等规模的数据集。
    • MongoDB:适合处理大规模数据集,支持复杂查询、数据分析和高可扩展性,常用于Web应用的后端数据库、日志分析等场景。
Redis支持的几种数据

Redis的常用数据类型主要包括五种基础数据类型和三种特殊数据类型。以下是这些数据类型的详细概述:

五种基础数据类型
  1. String(字符串)

    • 简介:String是Redis中最基础且最常用的数据类型。它是二进制安全的,可以用来存储任何类型的数据,如字符串、整数、浮点数、二进制数据(如图片、音频、视频等)的编码或路径,以及序列化后的对象。
    • 应用场景:常用于缓存、计数器、共享session、限速等场景。
    • 常用命令:包括SET、GET、INCR、DECR、MSET、MGET等。
  2. List(列表)

    • 简介:List是一个简单的字符串列表,按照插入顺序排序。列表中的元素可以是有序的、唯一的,也可以重复。Redis的List底层实现是双向链表或QuickList(Redis 3.2后引入)。
    • 应用场景:可以用于实现队列、栈、分页查询等功能。
    • 常用命令:包括RPUSH、LPUSH、LPOP、RPOP、LRANGE等。
  3. Set(集合)

    • 简介:Set是string类型的无序集合,集合成员是唯一的,不允许重复。Redis的Set是通过哈希表实现的,因此添加、删除和查找的复杂度都是O(1)。
    • 应用场景:常用于实现去重、交集、并集、差集等操作。
    • 常用命令:包括SADD、SREM、SMEMBERS、SINTER、SUNION等。
  4. Hash(哈希)

    • 简介:Hash是string类型的field和value的映射表,特别适合用于存储对象。Redis的Hash内部实现类似于JDK 1.8前的HashMap,是数组加链表的组合。
    • 应用场景:常用于存储结构化数据,如用户信息、购物车等。
    • 常用命令:包括HSET、HGET、HMSET、HMGET、HDEL等。
  5. Zset(有序集合)

    • 简介:Zset和Set一样也是string类型元素的集合,且不允许重复的成员。不同的是,Zset的每个元素都会关联一个double类型的分数,Redis正是通过分数来为集合中的成员进行从小到大的排序。
    • 应用场景:常用于实现排行榜、带权重的集合等功能。
    • 常用命令:包括ZADD、ZREM、ZRANGE、ZREVRANGE等。
三种特殊数据类型
  1. HyperLogLog

    • 简介:HyperLogLog是一种用于基数统计的数据类型,能够在有限的空间内完成独立总数的统计,并且误差率极低。
    • 应用场景:适用于统计UV(独立访客数)等场景。
  2. Bitmap

    • 简介:Bitmap是通过操作一系列的bit位来进行记录的数据类型,其最大优点是空间节省。
    • 应用场景:常用于统计用户是否在线、用户活跃度等场景。
  3. Geospatial

    • 简介:Geospatial是Redis 3.2版本引入的,用于地理位置信息的数据类型。
    • 应用场景:适用于实现如附近的人、地理位置查询等功能。
redis的定时机制实现

Redis 服务器是一个 事件驱动程序,服务器需要处理以下两类事件:文件事件 (服务器对套接字操作的抽象)和 时间事件(服务器对定时操作的抽象)。Redis 的定时机制就是借助时间事件实现的。

一个时间事件主要由以下三个属性组成:id,时间事件标识号;when,记录时间事件的到达时间;timeProc,时间事件处理器,当时间事件到达时,服务器就会调用相应的处理器来处理时间。一个时间事件根据时间事件处理器的返回值来判断是定时事件还是周期性事件。

单线程 Redis,为什么如此高效

虽然 Redis 文件事件处理器以单线程方式运行,但是通过使用 I/O 多路复用程序 来监听多个套接字,文件事件处理器既实现了高性能的网络通信模型,又可以很好地与 Redis 服务器中其他同样以单线程运行的模块进行对接,这保持了 Redis 内部单线程设计的简单性。

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

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

相关文章

I2C接口+高度集成的电源管理芯片(PMIC)-iML1942

电源管理芯片 - iML1942是一个高度集成的电源管理IC为TFT液晶面板。它具有完整的I2C接口来编程各种参数。该设备包括一个针对AVDD的电流模式升压调节器,一个针对VBK1的同步升压转换器。VGL可选的反相转换器或负电荷泵调节器,VSS1负线性调节器&#xff0c…

【C++:类的基础认识和this指针】

C的类与C语言的struct结构体有啥区别? 默认的访问限定符不同 类的简要 关键字:class{}里面是类的主体,特别注意:{}后面的;不可以省略类中的变量叫做成员变量,类中的函数叫做成员函数类中访问有三种访问权限…

系统集成项目管理工程师第12章思维导图发布

今天发布系统集成项目管理工程师新版第12章脑图的图片版

Ubuntu基本环境配置

#Jdk 安装 #--查看 已安装 的jdk软件 java -version # 安装jdk软件(如果有选择请选 y) sudo apt install openjdk-11-jdk # 自行学习 vi 或 vim 学习网址如下: # https://www.runoob.com/linux/linux-vim.html #-- 修改系统级 path : /etc/profile 文件 (注意要…

加入新数据预测,基于黏菌优化算法SMA优化SVM支持向量机回归预测(多输入单输出)

加入新数据预测,基于黏菌优化算法SMA优化SVM支持向量机回归预测(多输入单输出) 1.数据均为Excel数据,直接替换数据就可以运行程序。 2.所有程序都经过验证,保证程序可以运行。 3.具有良好的编程习惯,程序…

浏览器打不开网页、但是电脑有网络,解决办法(win11)

2023.07.06测试有效 华为电脑拿去免费拆机保养后,发现浏览器连接不上网了,但是!微信又能登录得上,也就是说电脑还是有网的。 原文链接 一、问题截图 二、解决方法 1.右键打开“网络和Internet设置” 2.打开“代理” 3.将该选项设…

Linux网络管理

一、linux网络管理 1.获取计算机的网络信息 基本语法: #ifconfig #ip address (ip a) 解析: ens33:默认网卡 lo:环回网卡,127.0.0.1作为固定ip代表本机 virbr0:虚拟网络接口&…

centos执行yum相关命令报错的可能原因

文章目录 1. 执行yum命令是报下面一大帕拉2. 安装某个包报错,找不到这个包 1. 执行yum命令是报下面一大帕拉 最后一行报错,在repo文件中找不到空baseurl:xxx / x86_64 执行这行命令把这个找不到的 xxx 禁掉即可sudo yum-config-manager --di…

Go 依赖注入设计模式

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

《QT从基础到进阶·四十三》QPlugin插件多线程问题和只有插件dll没有头文件和lib文件时调用插件中的方法

1、插件和多线程问题: 创建插件对象不能放到多线程执行,不然报错:ASSERT failure in QWidget: "Widgets must be created in the GUlthread. //不能放在多线程执行 QPluginLoader pluginLoader(pluginsDir.absoluteFilePath(fileName))…

系统测试-缺陷管理学习

目录 1、什么是缺陷 2、缺陷的类型 3、缺陷的交付物 4、缺陷报告的基本格式 1、什么是缺陷 就是软件最终的功能实现跟需求不一致的现象就是缺陷 2、缺陷的类型 做少了,做错了,做多了,做差了 3、缺陷的交付物 缺陷报告:也叫…

Vue中Class数据绑定

Class数据绑定 数据绑定的一个常见需求场景是操作CSS class列表,因为class是attribute(属性),我们可以和其他attribute一样使用v-bind 将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生…

Wish卖家必读:如何安全有效地进行店铺测评

Wish以其独特的商业模式和先进的技术在电商领域独树一帜。作为北美和欧洲最大的移动电商平台之一,Wish拥有庞大的用户基础,其中90%的卖家来自中国,这不仅显示了其在全球电商市场中的影响力,也反映了其对中国卖家的吸引力。 Wish平…

免费去马赛克软件,亲测支持视频和图片,这AI功能逆天了!

有小伙伴私信问阿星有什么去除马赛克的免费软件,求推荐好用的去马赛克软件。 市面上去马赛克的软件多如牛毛,但真正好用的真不多,而免费的是更少。今天阿星就分享一款 AI智能去马赛克软件,免费使用。软件支持去除图片和视频的马赛…

打卡第4天----链表

通过学习基础,发现我的基本功还得需要再练练,思路得再更加清晰明了,这样子做算法题才能驾轻就熟。每天记录自己的进步。 一、两两交换 题目编号:24 题目描述: 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本…

CS61B Data Structure-Jonathan Lecture2 using objects - OBJECTS METHODS

Recall String s1; // Step 1: declare a String variable s1 new String(); // Step 2: assign it a value, a new empty string objectString s2 new String(); // 1&2 combined今日知识点 situation: pointing to the same object s1 "Yow!";s2 s1; //…

安装 tesseract

安装 tesseract 1. Ubuntu-24.04 安装 tesseract2. Ubuntu-24.04 安装支持语言3. Windows 安装 tesseract4. Oracle Linux 8 安装 tesseract 1. Ubuntu-24.04 安装 tesseract sudo apt install tesseract-ocr sudo apt install libtesseract-devreference: https://tesseract-…

【算法专题】模拟算法题

模拟算法题往往不涉及复杂的数据结构或算法,而是侧重于对特定情景的代码实现,关键在于理解题目所描述的情境,并能够将其转化为代码逻辑。所以我们在处理这种类型的题目时,最好要现在演草纸上把情况理清楚,再动手编写代…

关于用户咨询华为擎云L410笔记本安装Windows系统的说明

同样也是单位购买的华为擎云L410 KLVU-WDU0笔记本电脑,国产UOS系统某些软件用着不是很方便,用户咨询是否能够安装Windows10或者Windows7? 带着种种疑问也做了一些查询,之前也给一些国产设备更改过操作系统,之前的国产设…

【MySQL】事务四大特性以及实现原理

事务四大特性 原子性(Atomicity) 事务中的所有操作要么全部完成,要么全部不执行。如果事务中的任何一步失败,整个事务都会被回滚,以保持数据的完整性。 一致性(Consistency) 事务应确保数据库…